Arrays.asList是将数组转为List。
public class ListTest {
public static void main(String[] args) {
String[] a = {"a","b","c"};
List<String> list = Arrays.asList(a);
System.out.println(list);
}
}
结果为:
但是,这里还有一个需要注意的问题:使用该方法将数组转为List之后,不能使用add/remove方法对该List进行操作,否则会报错。如下图:
public static void main(String[] args) {
String[] a = {"a","b","c"};
List<String> list = Arrays.asList(a);
list.add("d");
System.out.println(list);
}
那么,为什么会报错呢?不妨查看源码了解一下。
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
可以发现Arrays.asList()返回的是一个ArrayList,提到ArrayList,我们会很熟悉,第一感觉就是认为这和我们平时使用的java.util.ArrayList是一样的,然而并不是,点进去ArrayList这个类,可以发现ArrayList是Arrays类下面的一个内部类,其并没有add/remove方法。那么问题来了,为什么我们调用add/remove方法的时候会抛出异常呢?在源码中可以看到ArrayList这个内部类继承了AbstractList类,而AbstractList就有add/remove方法,如下图:
而前面我们使用Arrays.asList将数组转为List之后,使用add/remove方法实际上调用的是AbstractList下面的add/remove方法,导致抛出异常。