Ответ
Есть несколько способов автоматизировать создание геттеров и сеттеров, чтобы избежать boilerplate-кода.
1. Lombok (наиболее популярный) Использует аннотации, которые обрабатываются на этапе компиляции.
import lombok.Getter;
import lombok.Setter;
import lombok.AccessLevel;
@Getter // Создаст геттеры для всех полей
@Setter // Создаст сеттеры для всех не-final полей
public class User {
private String name;
@Setter(AccessLevel.PROTECTED) // Кастомизация: сеттер только с protected доступом
private int age;
private final String id; // Для final поля сеттер создан не будет
}
2. Records (Java 14+)
Создают неизменяемые (immutable) классы-носители данных. Геттеры генерируются автоматически (но называются не getName(), а просто name()).
public record User(String name, int age) {}
// Автоматически создаются: конструктор, методы name(), age(), equals(), hashCode(), toString()
// Сеттеры отсутствуют, так как record неизменяем.
3. Kotlin Data Classes (для Kotlin-проектов)
data class User(val name: String, var age: Int)
// Для val генерируется только геттер, для var — и геттер, и сеттер.
4. IDE Generation Большинство IDE (IntelliJ IDEA, Eclipse) могут сгенерировать геттеры/сеттеры по шаблону, но код все равно будет присутствовать в исходниках.
Рекомендация: Для стандартных mutable-классов в Java-проектах используйте Lombok. Для неизменяемых DTO предпочтительны Records.