一、问题现象

前几天用用反射的时候,用了一下 Arrays.asList() 方法,将获取到的属性数组转换成 list
后面需要对这个属性 list 里面的元素进行操作,发现会抛出一个异常

UnsupportedOperationException

Arrays.asList() 一个非常有意思的地方
那么到底是什么原因呢?我们继续往下深究

二、问题原因

我们查看一下 asList() 方法的源码

实际上是 new 了一个 ArrayList(),然后这个 ArrayList 是一个内部类,它继承了一个 AbstractList 类
Arrays.asList() 一个非常有意思的地方

Arrays.asList() 一个非常有意思的地方

这个 AbstractList 类里面虽然有重写 add 、remove 等方法,但是方法体内最后都会抛出一个异常 UnsupportedOperationException

这个 asList new 出来的 ArrayList 和我们平常使用的 ArrayList 是不一样的,平常我们使用的 ArrayList 里面重写是帮我们写好了相应的方法的,所以我们能够进行 add、remove 等操作了。

三、解决方案

重新写一个我们平时用的 ArrayList,将 asList 转换的 list 全部加载进来,再去进行操作
Arrays.asList() 一个非常有意思的地方

相关文章: