异常代码
|
|
运行这段代码,执行的三个方法都会抛异常:java.lang.UnsupportedOperationException
原因分析
跟踪源码,Arrays中asList实现:
|
|
乍一看确实返回了一个ArrayList,这么会不支持添加、删除、清空操作呢?再跟下ArrayList代码发现,这个ArrayList居然是在Arrays中定义的静态内部类:
|
|
而我们平时用的java.util.ArrayList是这个:
|
|
两者区别在于Arrays中的ArrayList并未实现add、remove方法,调用这两个方法的时候实际是调用了其父类AbstractList的add、remove方法,AbstractList中直接抛了异常:
|
|
而clear方法内部最终还是调用了remove来实现,所以同样会抛异常
解决方法
JDK当初这样设计估计只是简单提供一个可读权限集合,所以使用Arrays数组转集合时,如果会对集合进行添加或者删除时,可以将引用转移到其他地方:
|
|