打字猴:1.70044362e+09
1700443620
1700443621 at java.util.AbstractList.add(AbstractList.java:131)
1700443622
1700443623 at java.util.AbstractList.add(AbstractList.java:91)
1700443624
1700443625 UnsupportedOperationException,不支持的操作?居然不支持List的add方法,这真是奇怪了!还是来追根寻源,看看asList方法的源代码:
1700443626
1700443627 public static<T>List<T>asList(T……a){
1700443628
1700443629 return new ArrayList<T>(a);
1700443630
1700443631 }
1700443632
1700443633 直接new了一个ArrayList对象返回,难道ArrayList不支持add方法?不可能呀!可能,问题就出在这个ArrayList类上,此ArrayList非java.util.ArrayList,而是Arrays工具类的一个内置类,其构造函数如下所示:
1700443634
1700443635 //这是一个静态私有内部类
1700443636
1700443637 private static class ArrayList<E>extends AbstractList<E>
1700443638
1700443639 implements RandomAccess, java.io.Serializable{
1700443640
1700443641 //存储列表元素的数组
1700443642
1700443643 private final E[]a;
1700443644
1700443645 //唯一的构造函数
1700443646
1700443647 ArrayList(E[]array){
1700443648
1700443649 if(array==null)
1700443650
1700443651 throw new NullPointerException();
1700443652
1700443653 a=array;
1700443654
1700443655 }
1700443656
1700443657 /*其他方法省略*/
1700443658
1700443659 }
1700443660
1700443661 这里的ArrayList是一个静态私有内部类,除了Arrays能访问外,其他类都不能访问。仔细看这个类,它没有提供add方法,那肯定是父类AbstractList提供了,来看代码:
1700443662
1700443663 public boolean add(E e){
1700443664
1700443665 throw new UnsupportedOperationException();
1700443666
1700443667 }
1700443668
1700443669 父类确实提供了,但没有提供具体的实现(源代码上是通过add方法调用add(int, E)方法来实现的,为了便于讲解,此处缩减了代码),所以每个子类都需要自己覆写add方法,而Arrays的内部类ArrayList没有覆写,因此add一个元素就会报错了。
[ 上一页 ]  [ :1.70044362e+09 ]  [ 下一页 ]