Вопрос проверяет понимание принципов иммутабельности в объектно-ориентированном программировании и умение проектировать безопасные, предсказуемые классы.
Неизменяемый (immutable) класс — это класс, экземпляры которого не могут быть изменены после создания. Это ключевая концепция для написания безопасного многопоточного кода, так как неизменяемые объекты по своей природе потокобезопасны. Они также упрощают отладку и предотвращают побочные эффекты.
final, чтобы запретить наследование и переопределение методов.private и final.public final class ImmutablePerson {
private final String name;
private final int age;
private final List<String> hobbies;
public ImmutablePerson(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
// Создаём защитную копию изменяемого списка
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Возвращаем неизменяемую копию
return Collections.unmodifiableList(new ArrayList<>(hobbies));
}
}Неизменяемые классы широко используются в Java (например, String, Integer, LocalDate), в функциональном программировании, а также в многопоточных приложениях для избежания состояний гонки. Они также полезны в качестве ключей в HashMap, так как их хеш-код не меняется.
Вывод: Создание неизменяемых классов — это лучшая практика для повышения надёжности и безопасности кода, особенно в многопоточной среде. Применяйте этот подход, когда объект не должен изменяться после создания, например, для конфигураций, DTO или значений-обёрток.