Ответ
Immutable Class (Неизменяемый класс) — это класс, экземпляры которого не могут быть изменены после создания. Их состояние фиксируется при конструировании.
Как создать неизменяемый класс:
- Объявите класс как
final, чтобы запретить наследование. - Объявите все поля как
privateиfinal. - Инициализируйте все поля через конструктор.
- Не предоставляйте сеттеров (setter methods).
- Для полей-ссылок на изменяемые объекты:
- Не предоставляйте методов, меняющих эти объекты.
- В геттерах возвращайте глубокую копию или неизменяемое представление (например,
Collections.unmodifiableList()).
Пример:
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(hobbies);
}
}
Преимущества:
- Потокобезопасность: Объекты можно свободно передавать между потоками без синхронизации.
- Простота: Предсказуемое состояние, легче рассуждать о коде.
- Безопасность кэширования и использования в качестве ключей
HashMap.