Arrays.asList 规则
我们先看下阿里巴巴编程规范中的一条规则:
Code
add - java.lang.UnsupportedOperationException
/** * Arrays.asList的注意事项 */ public static void arraysAsList(){ List<Integer> list = Arrays.asList(1, 2,3,4,5); System.out.println(list.contains(2)); System.out.println(list.contains(6)); //使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法, // 它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常 list.add(8); System.out.println(list.contains(8)); }
额 调用 add方法向集合中添加数据,居然抛出了 java.lang.UnsupportedOperationException 异常
源码分析
返回一个 new ArrayList<>(a)
点击去,然后发现居然不是我们常用的 java.util.ArrayList
发现端倪了么?
它也继承了AbstractList类,
重写了抽象父类AbstractList的很多方法,比如刚刚使用的contains方法,但是却没有重写add方法
所以在调用add方法时才会抛出java.lang.UnsupportedOperationException异常。
同样的 remove 、 clear亦然
remove - java.lang.UnsupportedOperationException
clear - java.lang.UnsupportedOperationException