Ответ
Иммутабельный (неизменяемый) объект — это объект, состояние которого нельзя изменить после создания. Это фундаментальная концепция для написания потокобезопасного и предсказуемого кода.
Пример реализации на Java:
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
// 1. Класс объявлен как final
public final class ImmutablePerson {
// 2. Все поля private и final
private final String name;
private final int age;
private final List<String> hobbies; // Изменяемый объект внутри
// 3. Все данные инициализируются в конструкторе
public ImmutablePerson(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
// 4. Создаем защитную копию для изменяемых полей
this.hobbies = new ArrayList<>(hobbies);
}
// 5. Только геттеры, без сеттеров
public String getName() { return name; }
public int getAge() { return age; }
// 6. Геттер для коллекции возвращает неизменяемое представление
public List<String> getHobbies() {
return Collections.unmodifiableList(hobbies);
}
}
Ключевые принципы:
finalкласс — запрещает наследование и переопределение методов.finalполя — гарантируют однократную инициализацию.- Нет сеттеров — отсутствует публичный API для модификации.
- Защитное копирование — в конструкторе и геттерах для изменяемых внутренних объектов (массивы, коллекции).
- Возврат неизменяемых представлений — например, через
Collections.unmodifiableList().
Преимущества: потокобезопасность без синхронизации, простота кэширования и отладки, безопасное использование в качестве ключей HashMap.