Back to questions
Junior — Middle
62
Какие подходы позволяют обеспечить неизменяемость коллекции List внутри класса?
Answer from AI
sobes.tech AI
Чтобы обеспечить неизменяемость коллекции List внутри класса в Java, можно использовать несколько подходов:
- Использование
Collections.unmodifiableList- Создаёте список, затем оборачиваете его в
Collections.unmodifiableList, чтобы получить "читаемый" список без возможности модификации. - Важно, что если исходный список изменяется, то и "неизменяемый" список отражает эти изменения.
- Создаёте список, затем оборачиваете его в
import java.util.*;
public class MyClass {
private final List<String> list;
public MyClass(List<String> input) {
this.list = Collections.unmodifiableList(new ArrayList<>(input));
}
public List<String> getList() {
return list;
}
}
- Использование неизменяемых коллекций из Java 9+
- Можно создавать неизменяемые списки с помощью
List.of(...). - Такие списки нельзя изменить после создания.
- Можно создавать неизменяемые списки с помощью
public class MyClass {
private final List<String> list;
public MyClass(List<String> input) {
this.list = List.copyOf(input);
}
public List<String> getList() {
return list;
}
}
-
Копирование списка при передаче и возврате
- При передаче списка в конструктор создаёте копию.
- При возврате списка из геттера возвращаете копию, чтобы внешний код не мог изменить внутренний список.
-
Использование сторонних библиотек
- Например, Guava предоставляет
ImmutableList, который гарантирует неизменяемость.
- Например, Guava предоставляет
Выбор подхода зависит от требований к производительности и безопасности. Главное — не предоставлять прямой доступ к изменяемому списку и использовать неизменяемые обёртки или копии.