可以通过以下几种方法来确保一个集合不能被修改:
- 使用不可变集合:Java提供了一些不可修改的集合类,如
Collections.unmodifiableList
、Collections.unmodifiableSet
和Collections.unmodifiableMap
。这些方法返回的集合只能读取元素,而不能修改。
Listlist = new ArrayList<>(); list.add("item1"); list.add("item2"); List unmodifiableList = Collections.unmodifiableList(list); unmodifiableList.add("item3"); // 抛出UnsupportedOperationException异常
- 使用只读视图:Guava库提供了一个
ImmutableXXX.copyOf
方法,可以创建一个集合的只读视图。
Listlist = new ArrayList<>(); list.add("item1"); list.add("item2"); List readOnlyList = ImmutableList.copyOf(list); readOnlyList.add("item3"); // 抛出UnsupportedOperationException异常
- 使用Java 9的不可变集合:Java 9引入了不可变集合类,如
List.of
、Set.of
和Map.of
。这些方法返回的集合是不可修改的。
Listlist = List.of("item1", "item2"); list.add("item3"); // 抛出UnsupportedOperationException异常
- 使用防御性编程:在代码中添加必要的检查和限制,确保集合不会被修改。例如,在方法的参数中使用
Collections.unmodifiableList
方法返回的集合,或者在方法内部创建一个副本并返回。
private Listlist = new ArrayList<>(); public List getList() { return Collections.unmodifiableList(list); // 返回不可修改的集合 } public void addItem(String item) { if (item != null) { list.add(item); // 添加元素到原始集合 } }