Назад к вопросам
Junior
80
questionbank
Что такое неизменяемые классы в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Неизменяемый (immutable) класс в Java — это класс, объекты которого после создания нельзя изменить.
Правила для создания неизменяемого класса:
- Класс должен быть объявлен как
final, чтобы предотвратить наследование и изменение поведения субклассами. - Все поля должны быть объявлены как
final, чтобы их нельзя было изменить после инициализации. - Все поля должны быть объявлены как
private, чтобы предотвратить прямой доступ извне. - Не предоставлять setter-методы.
- Если класс содержит изменяемые поля, например,
List, их нужно копировать в конструкторе и при возвращении из getter-методов (defensive copy). - Не предоставлять методы, которые могут изменить состояние объекта.
Преимущества неизменяемых классов:
- Потокобезопасность (thread-safety): несколько потоков могут безопасно обращаться к одному и тому же объекту без необходимости синхронизации.
- Кэширование: неизменяемые объекты легко кэшируются, что улучшает производительность.
- Простота отладки и тестирования: состояние объекта предсказуемо.
- Использование в качестве ключей в ассоциативных коллекциях (
Map,Set).
Пример неизменяемого класса:
final class ImmutableExample {
private final String name;
private final int value;
private final List<String> tags;
public ImmutableExample(String name, int value, List<String> tags) {
this.name = name; // Примитивы и String неизменяемы
this.value = value;
// Защитное копирование изменяемого поля в конструкторе
this.tags = new ArrayList<>(tags);
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
public List<String> getTags() {
// Защитное копирование при возвращении изменяемого поля
return new ArrayList<>(tags);
}
// No setters or methods that change state
}