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异常。
标签:Arrays,ArrayList,add,集合,方法,asList From: https://www.cnblogs.com/miku-39/p/17779606.html