what is getter and setter in java
Getters and setters in Java are essential methods for accessing and modifying private class fields while maintaining encapsulation, a core principle of object-oriented programming. They act as public interfaces to private data, allowing controlled interaction and data validation.
Core Purpose
Getters (also called accessors) retrieve the value of a private field, while setters (or mutators) update it. This protects internal data from direct external access, preventing invalid states—like setting an age to a negative number.
By convention:
- Getter naming : Starts with "get" followed by the field name (camelCase), e.g.,
getName()for anamefield. - Setter naming : Starts with "set", e.g.,
setName(String name). - Boolean getters : Often use "is" instead of "get", like
isActive().
Basic Example
Consider a simple Person class. Without getters/setters, you'd expose fields
publicly, risking misuse. Here's how encapsulation works:
java
public class Person {
private String name;
private int age;
// Getter for name
public String getName() {
return name;
}
// Setter for name
public void setName(String name) {
this.name = name; // 'this' distinguishes parameter from field
}
// Getter for age
public int getAge() {
return age;
}
// Setter for age (with validation)
public void setAge(int age) {
if (age >= 0 && age <= 120) {
this.age = age;
} else {
throw new IllegalArgumentException("Invalid age");
}
}
}
Usage :
java
Person person = new Person();
person.setName("Alice");
person.setAge(30);
System.out.println(person.getName() + " is " + person.getAge()); // Alice is 30
This example shows validation in the setter, a best practice for data integrity.
Why Use Them?
- Encapsulation : Hide implementation details; change internals without breaking external code.
- Validation : Enforce rules (e.g., positive numbers only).
- Flexibility : Add logic later, like logging or computed values.
- Immutability support : Make getters return copies or unmodifiable views.
Common Pitfalls (from developer forums):
- Direct field exposure defeats the purpose.
- Returning mutable objects in getters (e.g.,
return list;allows external modification). - Overusing for every field—sometimes public finals suffice for true immutability.
Aspect| Without Getters/Setters| With Getters/Setters
---|---|---
Access| person.name = "Bob"; (risky)| person.setName("Bob");
(controlled) 1
Validation| None built-in| Custom checks in setter 3
Maintenance| Brittle to changes| Flexible refactoring 9
Security| Data tampering easy| Protected internals 4
Advanced Variations
In Java 14+ records (a modern alternative), getters are auto-generated, and setters aren't needed for immutable data:
java
public record Person(String name, int age) {}
// Auto: name(), age() as getters
For Lombok (popular library, trending in 2026 Java discussions), use
@Getter/@Setter annotations to auto-generate them—saves boilerplate but
sparks debates on readability vs. conciseness.
Multi-Viewpoint : Stack Overflow devs argue setters can mimic public fields (an "anti-pattern"), favoring constructor injection for immutability. Others praise them for legacy code evolution.
Real-World Story
Imagine building a banking app in 2026. A naive Account class lets balance -= 1000 go negative. Add a setter: setBalance(double amount) { if (amount >= 0) this.balance = amount; }. Suddenly, your app survives audits—encapsulation
saves the day, just like it has since Java's early days.
TL;DR : Getters read private data safely; setters update it with checks. Essential for clean, secure Java code.
Information gathered from public forums or data available on the internet and portrayed here.