Вопрос проверяет понимание принципов иммутабельности и умение создавать неизменяемые классы, что важно для написания предсказуемого и безопасного кода.
Иммутабельный класс — это класс, экземпляры которого не могут изменять своё внутреннее состояние после создания. Это ключевая концепция для написания потокобезопасного, предсказуемого и простого для отладки кода, так как объект гарантированно остаётся в одном и том же состоянии на протяжении всего жизненного цикла.
final, чтобы предотвратить наследование и переопределение методов.private и final, чтобы они могли быть инициализированы только в конструкторе.import java.util.*;
public final class ImmutablePerson {
private final String name;
private final int age;
private final List hobbies;
// Конструктор с защитным копированием
public ImmutablePerson(String name, int age, List hobbies) {
this.name = name;
this.age = age;
// Создаём копию переданного списка
this.hobbies = new ArrayList<>(hobbies);
}
// Геттеры
public String getName() { return name; }
public int getAge() { return age; }
// Возвращаем копию списка, а не оригинал
public List getHobbies() {
return new ArrayList<>(hobbies);
}
}В этом примере даже если внешний код изменит исходный список hobbies, переданный в конструктор, или получит список через геттер, внутреннее состояние объекта ImmutablePerson останется неизменным.
Иммутабельные объекты широко используются в многопоточном программировании, так как они по своей природе потокобезопасны (не требуют синхронизации). Они являются идеальными кандидатами для ключей в HashMap или элементов в Set, так как их хэш-код не меняется. Также они часто применяются в функциональном программировании и в качестве DTO (Data Transfer Objects) для передачи данных между слоями приложения.
Вывод: Создавайте immutable классы, когда вам нужны объекты с постоянным, надёжным состоянием, особенно в многопоточной среде, для ключей коллекций или для упрощения логики программы за счёт отсутствия побочных эффектов.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Java
Ключевые слова
Подпишись на Java Developer в телеграм