使用Arrays.asList()居然抛出了异常!

2021-04-22 10:16:39 浏览数 (1)

导读: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不提供,需要用到的也是会自己生成一个内部类去实现这个的。只是我们使用的时候要留意一些~

0 人点赞