购物网站建设的思路,河南做网站公司报价,seo外链发布软件,wordpress抓取别人网站通常初始化后使用如下#xff0c;但是报错 UnsupportOperationException.... 根据提示信息#xff0c;就是调用add()方法时抛出了异常。顺着堆栈信息往上找#xff0c;提示的是AbstractList类的108行出了异常#xff0c;这一行所在方法的具体实现如下#xff1a; //108行
… 通常初始化后使用如下但是报错 UnsupportOperationException.... 根据提示信息就是调用add()方法时抛出了异常。顺着堆栈信息往上找提示的是AbstractList类的108行出了异常这一行所在方法的具体实现如下 //108行
public boolean add(E var1) {this.add(this.size(), var1);return true;}
//148行
public void add(int var1, E var2) {throw new UnsupportedOperationException();}//下面看下Arrays.asList的具体实现
SafeVarargs
public static T ListT asList(T... var0) {return new Arrays.ArrayList(var0);
}//Arrays.ArrayList 实现
private static class ArrayListE extends AbstractListE implements RandomAccess, Serializable {private static final long serialVersionUID -2764017481108945198L;private final E[] a;//关键ArrayList(E[] var1) {this.a (Object[])Objects.requireNonNull(var1);}public int size() {return this.a.length;}public Object[] toArray() {return (Object[])this.a.clone();}public T T[] toArray(T[] var1) {int var2 this.size();if (var1.length var2) {return Arrays.copyOf(this.a, var2, var1.getClass());} else {System.arraycopy(this.a, 0, var1, 0, var2);if (var1.length var2) {var1[var2] null;}return var1;}}public E get(int var1) {return this.a[var1];}public E set(int var1, E var2) {Object var3 this.a[var1];this.a[var1] var2;return var3;}public int indexOf(Object var1) {Object[] var2 this.a;int var3;if (var1 null) {for(var3 0; var3 var2.length; var3) {if (var2[var3] null) {return var3;}}} else {for(var3 0; var3 var2.length; var3) {if (var1.equals(var2[var3])) {return var3;}}}return -1;}public boolean contains(Object var1) {return this.indexOf(var1) ! -1;}public SpliteratorE spliterator() {return Spliterators.spliterator(this.a, 16);}public void forEach(Consumer? super E var1) {Objects.requireNonNull(var1);Object[] var2 this.a;int var3 var2.length;for(int var4 0; var4 var3; var4) {Object var5 var2[var4];var1.accept(var5);}}public void replaceAll(UnaryOperatorE var1) {Objects.requireNonNull(var1);Object[] var2 this.a;for(int var3 0; var3 var2.length; var3) {var2[var3] var1.apply(var2[var3]);}}public void sort(Comparator? super E var1) {Arrays.sort(this.a, var1);}
}
//此处可以发现改内部类继承了 AbstractList 但是却没有实现其的add,remove等方法。下面给出AbstractList 的定义
public abstract class AbstractListE extends AbstractCollectionE implements ListE {protected transient int modCount 0;protected AbstractList() {}public boolean add(E var1) {this.add(this.size(), var1);return true;}public abstract E get(int var1);public E set(int var1, E var2) {throw new UnsupportedOperationException();}public void add(int var1, E var2) {throw new UnsupportedOperationException();}public E remove(int var1) {throw new UnsupportedOperationException();}.......
} 最后我们发现此ArrayList不是彼ArrayList。这个ArrayList是Arrays工具类中实现的内部静态类我们可以发现这个类集成了AbstractList类但是并没有重写add()方法所以在我们的示例代码标记(2)处调用add()方法时实际是调用父类AbstractList的add()方法这也就回到了开头分析的那两个add()方法了它们都没有具体实现只会抛出UnsupportedOperationException。 结论总结 我们调用Arrays的asList()方法将数组转换成List时返回的是Arrays的静态内部类ArrayList它自身并未重写add()方法而其父类AbstractList实现的add()方法只会抛出UnsupportedOperationException导致我们调用Arrays的静态内部类ArrayList的add()方法时实际调用的是只会抛出UnsupportedOperationException的AbstractList的add()方法这就是异常出现的原因了。 解决办法 4、 解决方案 可以自己写个工具类转换方法可以参考一下代码 private static E ListE transferArrayList(E[] array){
ListE transferedList new ArrayList();
Arrays.stream(array).forEach(arr - transferedList.add(arr));
return transferedList;
} 转载于:https://www.cnblogs.com/weixiaotao/p/11345125.html