不可修改的收藏
有時,暴露內部集合並不是一個好的做法,因為它可能導致惡意程式碼漏洞,因為它具有可變特性。為了提供只讀集合,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)