调用List的方法抛出UnsupportedOperationException

调用List的方法抛出UnsupportedOperationException

Background

使用Arrays.asList方法将数组转化成List集合后调用List的方法抛出UnsupportedOperationException异常。

Exception

1
2
3
4
5
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
at com.synnex.order.search.service.dao.DemoTest.test7(DemoTest.java:140)

Why

Arrays.asList方法重新new了一个ArrayList, 但是这个ArrayList不是来自于util包下面的ArrayList, 而是Arrays类里面的内部静态类。这个内部静态类继承AbstractList, 但是没有重写add() , remove()等方法, 所以在调用add(). remove()等方法的时候,实际调用的是AbstractList类的add()和remove()的方法,因此会抛出异常。

How

1
2
3
4
String[] testArr = {"Tom","Jerry","Dave"};
List<String> stringList = new ArrayList<String>(Arrays.asList(testArr));
stringList.remove("Tom");
System.out.println(stringList);
如果对您有帮助,可以打赏呦!