最近学习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);

}
谁能帮忙解释一下为什么?

解决方案 »

  1.   

    这个东西你还是别深究了,说不定jdk 1.7+就对了。
      

  2.   

    List<Integer> ints = Arrays.asList(1,2,3,4,5,6,7);
    这个返回的是Arrays中的private class ArrayList非java.util.ArrayList()
    里面的add方法直接返回了异常
    public void add(int index, E element) {
    throw new UnsupportedOperationException();
        }
      

  3.   

    Arrays.asList返回的是给定数组的视图
    Arrays.asList返回的List是Arrays的私有类Arrays.ArrayList
    它直接继承自AbstractList
    AbstractList默认的add方法就是抛出UnsupportedOperationException
    它和java.java.util.ArrayList是不同的实现
    看一下jdk源码就明白了