Junior — Middle
Hogyan hozhatunk létre olyan osztályt, amelynek objektumai az inicializálás után nem módosíthatók, miközben van benne egy kollekció, mint egyik összetevő?
sobes.tech MI
Válasz az MI-től
Чтобы создать в Java неизменяемый (immutable) класс с коллекцией, нужно:
- Объявить класс как final, чтобы его нельзя было унаследовать и изменить поведение.
- Сделать все поля private и final.
- Инициализировать коллекцию в конструкторе, создавая её копию (например, через
new ArrayList<>(...)), чтобы внешние изменения не влияли на внутреннее состояние. - Возвращать из геттеров либо неизменяемые обертки над коллекциями (
Collections.unmodifiableList(...)), либо копии коллекций, чтобы предотвратить изменение извне.
Пример:
import java.util.Collections;
import java.util.List;
public final class ImmutableClass {
private final List<String> items;
public ImmutableClass(List<String> items) {
// Создаем копию коллекции для защиты от внешних изменений
this.items = Collections.unmodifiableList(List.copyOf(items));
}
public List<String> getItems() {
return items; // возвращаем неизменяемый список
}
}
Таким образом, после создания объекта изменить его коллекцию нельзя.