Middle
86
questionbank
Что нужно сделать для создания immutabled класса в Java?
Ответ от нейросети
sobes.tech AI
- Объявить класс с модификатором
final, чтобы предотвратить наследование. - Объявить все поля класса с модификатором
final. - Объявить все поля класса с модификатором
private, чтобы предотвратить прямой доступ. - Не предоставлять сеттеры для полей.
- Если класс содержит мутабельные объекты (например,
ArrayList), то:- В конструкторе копировать входящие мутабельные объекты вместо присваивания ссылок.
- В геттерах возвращать копии мутабельных объектов вместо самих объектов.
Пример:
// Класс Person является immutable
public final class Person {
private final String name;
private final int age;
private final List<String> tags; // Мутабельное поле
// Конструктор глубоко копирует мутабельные поля
public Person(String name, int age, List<String> tags) {
this.name = name;
this.age = age;
// Копируем список при создании объекта
this.tags = new ArrayList<>(tags);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
// Возвращаем копию списка, чтобы предотвратить его изменение извне
public List<String> getTags() {
return new ArrayList<>(tags);
}
// Переопределение методов equals и hashCode при необходимости
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name) &&
Objects.equals(tags, person.tags);
}
@Override
public int hashCode() {
return Objects.hash(name, age, tags);
}
}