如果我在Java中定义一个ArrayList,它是私有的,最终的,只有getter。用户仍然可以通过添加或删除ArrayList来获取ArrayList并修改ArrayList。我怎么能避免这个?
答案 0 :(得分:2)
您可以在列表中创建不可修改的列表。 Collections类有一个实用方法。
List<String> unModifiableList=Collections.unmodifiableList(
oldList);
在实际对象中准备好列表后,可以将其冻结。
答案 1 :(得分:0)
Unmodifiable List是您必须采取的方法。但是这是一个限制,因为这个不可修改的类正在使用通常的List并且它仍然可以修改。
final List<String> modifiable = new ArrayList<>();
modifiable.add("Java");
modifiable.add("is");
final List<String> unmodifiable = Collections.unmodifiableList(modifiable);
System.out.print("Before modification: " + unmodifiable);
modifiable.add("the");
modifiable.add("best");
System.out.print("After modification: " + unmodifiable);
在上面的代码段中输出是意外的,如下所示。
修改前:[Java,is] 修改后:[Java,is,the,best]
阅读this article以了解unmodifiableList 的陷阱及其解决方案。
答案 2 :(得分:0)
您可以在getter方法中返回List的新实例,并将列表作为构造函数参数。