Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法

发布时间 2023-10-21 21:47:22作者: miku音未来

Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,此处测试代码如下,这里使用add方法:

1 public class main {
2     public static void main(String[] args) {
3         int[] num = {1,2,3};
4         List list = Arrays.asList(num);
5         list.add(4);
6     }
7 }

在idea运行会提示UnsupportedOperationException,追踪源码进行分析

1.首先Arrays.asList()得到的列表是Arrays类中的内部类ArrayList,源码如下

 1 public static <T> List<T> asList(T... a) {
 2         return new ArrayList<>(a);
 3     }
 4 
 5     /**
 6      * @serial include
 7      */
 8     private static class ArrayList<E> extends AbstractList<E>
 9         implements RandomAccess, java.io.Serializable
10     {
11         //ArrayList的方法
      ......
12 }

在上述源码中,第2行在调用asList方法会返回一个新的ArrayList对象,这个对象类型就是第8行的代码,Arrays类中的内部类ArrayList

2.这个内部类ArrayList继承了AbstractList这个类,并实现了如下图所示方法

 可以发现并没有实现add方法。

3.因此在调用add方法时,根据继承规则子类没有找到add方法,便会去父类寻找,即在AbstractList这个类中找到add方法,如下图所示

再追踪add(size(), e)

 

 发现其直接抛出UnsupportedOperationException异常。