文章目录
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亦然