1. 异常例子
一般我们在想要把数组转换成list的时候,会使用Arrays.asList(数组)
如下面的例子
package com;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
String[] ss = {"2", "3"};
List<Object> objects = Arrays.asList(ss);
System.out.println(objects);
objects.add("4");
System.out.println(objects);
}
}
执行后输出:
2. 源代码
首先,在List objects = Arrays.asList(ss);这一行中的objects本质上是由一个ArrayList来实现的
单纯的初始化一个objects并没有什么问题,可以看到objects输出语句也是正常执行了
但是在执行objects.add(“4”)的时候,抛出了异常java.lang.UnsupportedOperationException
查看Arrays的源代码寻其原因,发现
上面用的ArrayList并不是java.util.ArrayList,而是Arrays自己定义的一个内部类,这个内部类并没有实现父类AbstractList的add方法,所以直接调用的是AbstractList的add,而AbstractList类中的add会抛出一个异常
所以也就有了我们最开始看到的异常问题
3. 解决办法
手动将Arrays的内部类转换为java.util.ArrayList
package com;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class test {
public static void main(String[] args) {
String[] ss = {"2", "3"};
// List<Object> objects = Arrays.asList(ss);
List<Object> objects = new ArrayList(Arrays.asList(ss));
System.out.println(objects);
objects.add("4");
System.out.println(objects);
}
}