Arrays.asList坑点记录

Arrays.asList坑点记录

Posted by 肖圣豪 on 2019-01-17

Arrays.asList坑点记录

坑点

1
2
3
4
5
public static void main( String[] args ){
Integer [] a = {0,1,2,3};
List<Integer> integers = Arrays.asList(a);
integers.add(4);
}

上述代码执行后结果:

1
2
3
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at com.xinji.directpaymentclient.web.service.ArraysTest.main(ArraysTest.java:16

分析原因

进入Arrays.asList方法:

1
2
3
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}

发现返回的ArrayList 是Arrays的内部类,并不是java.util包下的ArrayList 。 Arrays里面的ArrayList并没有重写父类AbstractList 中的add,remove方法。 而父类AbstractList中的add,remove方法是

1
2
3
4
5
6
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}

所以才会报UnsupportedOperationException错误。

解决办法

如果不需要改变list长度,可以使用Arrays.asList. 但如果要改变长度就如下处理转成java.util包下的ArrayList

1
2
3
4
5
6
7
public static void main( String[] args ){
Integer [] a = {0,1,2,3,4,5};
List<Integer> ints = new ArrayList<Integer>(Arrays.asList(a));
ints.add(6);
System.out.println(ints.size());

}



支付宝打赏 微信打赏

赞赏一下