Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)at MyTest.main(MyTest.java:18)
看《Java编程思想》的时候学到List,有段例子
//: holding/AddingGroups.java
// Adding groups of elements to Collection objects.
import java.util.*;
public class MyTest {
public static void main(String[] args) {
Collection<Integer> collection =
new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Integer[] moreInts = { 6, 7, 8, 9, 10 };
collection.addAll(Arrays.asList(moreInts));
// Runs significantly faster, but you can't
// construct a Collection this way:
Collections.addAll(collection, 11, 12, 13, 14, 15);
Collections.addAll(collection, moreInts);
// Produces a list "backed by" an array:
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
list.set(1, 99); // OK -- modify an element
//list.add(21); // Runtime error because the
// underlying array cannot be resized.
}
} ///:~
运行加了注释的list.add(21)会出现 java.lang.UnsupportedOperationException异常,看
Arrays源代码发现
Arrays.asList返回的是Arrays的内部类也就是Arrays$ArrayList,该类继承AbstractList,但是没有重写add()和remove()方法,而这两个方法默认抛出java.lang.UnsupportedOperationException异常,而不重写这两个方法就等于返回的List长度不可变,为什么不允许改变长度呢,因为Arrays$ArrayList底层表示是数组,改变一个数组的长度当然不允许了。
怎么避免这个异常呢?
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));生成新的List的好了