一、Arrays.asList()返回结果的是什么?
让我们看看源码
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
asList()返回了ArrayList,不过它不是我们熟悉的ArrayList,而是Arrays类中的内部类Arrays$ArrayList。下面让我们看看它是什么?
public class Arrays {
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
....省略
}
}
二、Arrays$ArrayList使用add()的正确与否?
首先让我们来举个例子
String[] str = new String[] {"you", "wu"};
List list = Arrays.asList(str);
list.add("good");
add()可以正常工作吗?
答案是不能!抛出UnsupportedOperationException异常。
为什么会这样呢?
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable {
}
在Arrays$ArrayList的定义中它继承了AbstractList,在AbstractList中有这样一些方法
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
Arrays$ArrayList并没有重载这个方法,而是继承。这样就产生了异常。
本文详细探讨了Java中Arrays.asList()方法的返回类型——Arrays$ArrayList,并解释了为什么该类的add()方法会抛出UnsupportedOperationException异常。通过源码分析,揭示了其背后的原因在于Arrays$ArrayList继承自AbstractList,但未重写add()方法。
541

被折叠的 条评论
为什么被折叠?



