最近学习think in java, 做练习时,发现这么一个问题:
代码一:
public static void main(String[] args) {
List<Integer> ints = Arrays.asList(1,2,3,4,5,6,7);
print("1: "+ints);
Integer h = new Integer(8);
ints.add(new Integer(8));
print("2: " + ints);
}
运行时提示错误:java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source>但是把代码改为如下后却能正常运行:
public static void main(String[] args) {
List<Integer> ints = new ArrayList<Integer>();
print("1: "+ints);
Integer h = new Integer(8);
ints.add(new Integer(8));
print("2: " + ints);
}
谁能帮忙解释一下为什么?
代码一:
public static void main(String[] args) {
List<Integer> ints = Arrays.asList(1,2,3,4,5,6,7);
print("1: "+ints);
Integer h = new Integer(8);
ints.add(new Integer(8));
print("2: " + ints);
}
运行时提示错误:java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source>但是把代码改为如下后却能正常运行:
public static void main(String[] args) {
List<Integer> ints = new ArrayList<Integer>();
print("1: "+ints);
Integer h = new Integer(8);
ints.add(new Integer(8));
print("2: " + ints);
}
谁能帮忙解释一下为什么?
这个返回的是Arrays中的private class ArrayList非java.util.ArrayList()
里面的add方法直接返回了异常
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
Arrays.asList返回的List是Arrays的私有类Arrays.ArrayList
它直接继承自AbstractList
AbstractList默认的add方法就是抛出UnsupportedOperationException
它和java.java.util.ArrayList是不同的实现
看一下jdk源码就明白了