不可修改的收藏

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