Sobes.tech
Назад к вопросам
Junior — Middle
63

Какие подходы позволяют обеспечить неизменяемость коллекции List внутри класса?

Ответ от нейросети

sobes.tech AI

Чтобы обеспечить неизменяемость коллекции List внутри класса в Java, можно использовать несколько подходов:

  1. Использование 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;
    }
}
  1. Использование неизменяемых коллекций из 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;
    }
}
  1. Копирование списка при передаче и возврате

    • При передаче списка в конструктор создаёте копию.
    • При возврате списка из геттера возвращаете копию, чтобы внешний код не мог изменить внутренний список.
  2. Использование сторонних библиотек

    • Например, Guava предоставляет ImmutableList, который гарантирует неизменяемость.

Выбор подхода зависит от требований к производительности и безопасности. Главное — не предоставлять прямой доступ к изменяемому списку и использовать неизменяемые обёртки или копии.