确保一个集合不能被修改的实现
前言
我们很容易想到用final关键字进行修饰,我们都知道final关键字可以修饰类,方法,成员变量,final修饰的类不能被继承,final修饰的方法不能被重写,final修饰的成员变量必须初始化值,如果这个成员变量是基本数据类型,表示这个变量的值是不可改变的,如果说这个成员变量是引用类型,则表示这个引用的地址值是不能改变的,但是这个引用所指向的对象里面的内容还是可以改变的。
那么,我们怎么确保一个集合不能被修改?首先我们要清楚,集合(map,set,list…)都是引用类型,所以我们如果用final修饰的话,集合里面的内容还是可以修改的。
场景 ---- 在使用Spring JPA 分页查询的时候,里面的context是一个不可被修改的集合
查看调用方法
发现在封装集合时,使用了StreamUtils.toUnmodifiableList();
然后继续往下查看,发现使用了Collectors里UnmodifiableList内部类
该类里面对集合的方法进行了封装
对修改关闭
结论
可使用Collectors.toUnmodifiableList( … )方法保证集合不被修改
同样里面还有toUnmodifiableLSet、toUnmodifiableMap等