前言
首先让我们来看一段代码:
String[] strings = new String[]{
"hello","world"};
List<String> stringList = Arrays.asList(strings);
stringList.add("java");
咋眼一看这段代码没什么问题,然而这段带却抛出了一个名为:UnsupportedOperationException的异常。看到异常时有些懵逼,查了资料说只是因为Arrays自身实现的问题。于是乎,我查看了源码。
ArrayList之李逵与李鬼
Arrays.toList(T… t) 方法返回的是Arrays的一个内部类ArrayList,大家可不要被这个名字骗了,此ArrayList非彼ArrayList啊,这完全就是李鬼啊。
声明方式
先看一下这个ArrayList的声明方式吧:
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
我们经常使用的ArrayList的声明方式为:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
再看看AbstractList的声明方式为: