不可修改的收藏
有时,暴露内部集合并不是一个好的做法,因为它可能导致恶意代码漏洞,因为它具有可变特性。为了提供只读集合,java 提供了其不可修改的版本。
不可修改的集合通常是可修改集合的副本,它保证集合本身不会被更改。尝试修改它将导致 UnsupportedOperationException 异常。
重要的是要注意到集合中存在的对象仍然可以被更改。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyPojoClass {
private List<Integer> intList = new ArrayList<>();
public void addValueToIntList(Integer value){
intList.add(value);
}
public List<Integer> getIntList() {
return Collections.unmodifiableList(intList);
}
}
以下尝试修改不可修改的集合将引发异常:
import java.util.List;
public class App {
public static void main(String[] args) {
MyPojoClass pojo = new MyPojoClass();
pojo.addValueToIntList(42);
List<Integer> list = pojo.getIntList();
list.add(69);
}
}
输出:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
at App.main(App.java:12)