不可修改的收藏

有时,暴露内部集合并不是一个好的做法,因为它可能导致恶意代码漏洞,因为它具有可变特性。为了提供只读集合,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)