Чем обеспечивается иммутабельность в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Иммутабельность в Java обеспечивается следующими способами:
-
Объявление класса как
final: Класс нельзя наследовать, что предотвращает создание мутабельных подклассов. -
Объявление всех полей как
final: Значение поля может быть присвоено только один раз (при инициализации или в конструкторе) и не может быть изменено после создания объекта. -
Приватность полей: Поля должны быть приватными (
private), чтобы исключить прямой доступ и изменение значений извне класса. -
Отсутствие сеттеров или методов, изменяющих состояние объекта: Класс не должен предоставлять публичных методов, которые могут изменить значение полей объекта после его создания.
-
Правильное обращение с мутабельными полями: Если класс содержит ссылки на мутабельные объекты (например,
Listили собственный мутабельный класс), необходимо:- Создавать их копии при инициализации (в конструкторе).
- Возвращать их копии в геттерах, чтобы избежать изменения внутренних состояний объекта извне.
public final class ImmutableExample { // final класс
private final String name; // final и private поле
private final List<String> items; // final и private поле
public ImmutableExample(String name, List<String> items) {
this.name = name;
// Создание защищенной копии мутабельного списка
this.items = new ArrayList<>(items);
}
public String getName() {
return name;
}
public List<String> getItems() {
// Возврат защищенной копии мутабельного списка
return Collections.unmodifiableList(new ArrayList<>(items));
}
// Отсутствие сеттеров или методов, изменяющих состояние
}
Примеры встроенных иммутабельных классов в Java: String, классы-обертки примитивов (Integer, Long, etc.), BigInteger, BigDecimal.