导读:Arrays此类包含用于操纵数组的各种方法(例如排序和搜索)。在JDK 1.7 版本加入,此类还包含一个静态工厂,该工厂允许将数组视为列表。
把数组转换成List集合,有个很方便的方法
List<String> list = Arrays.asList("a","b","c")
错误场景
当你看到这段代码时可能觉得没啥问题啊!不就是将数组转化成list集合,然后再往集合里面添加元素么~
是的当时你智哥也是这般自信,没有仔细看Arrays.asList(...)
的源码,执行下这段代码看下执行结果
抛出不支持请求的操作异常,有点令人意外哈!
代码分析
查看Arrays.asList(...)
的源码,
继续看ArrayList
然后惊呆了
这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList
它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。
而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException
异常的!
其实站在设计者的角度思考,设计的初衷就是要生成一个不可更改的list,保证数据的安全性的场景,比如要生成一个常量list,里面的值都是约定好了的,不能被代码随意修改,这种就很需要这个方法,就算jdk不提供,需要用到的也是会自己生成一个内部类去实现这个的。只是我们使用的时候要留意一些~