Collection.unmodifiableCollection()
Collections.unmodifiableCollection这个可以得到一个集合的镜像,它的返回结果不可直接被改变.
Collections.unmodifiableCollection 实际是使用的代理模式,返回的Collection内部仍然使用原来Collection。
public static void main(String[] args) {
ArrayList<String> strings = new ArrayList<>();
strings.add("货拉拉");
strings.add("拉不拉");
strings.add("拉布拉多");
Collection<String > ts = Collections.unmodifiableCollection(strings);
System.out.println(Arrays.toString(new Collection[]{ts}));
try{//对ts修改
ts.add("不拉");
}catch(Exception e){
System.out.println(e);
}
System.out.println(Arrays.toString(new Collection[]{ts}));
//对原数组修改
strings.add("可以啦");
System.err.println(Arrays.toString(new Collection[]{ts}));
}
上例对ts修改元素会抛出一个异常 ,但是本身列表strings 还是可以被修改的
我们对strings进行操作,ts也同样获得了和strings相同的内容,这样就可以避免其他人员修改这个strings对象。有时候需要对它进行保护,避免返回结果被人修改。