-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Arrays.asList 获得的 List 应该注意什么
cxuan edited this page Jun 15, 2020
·
1 revision
Arrays.asList
是 Array 中的一个静态方法,它能够实现把数组转换成为 List 序列,需要注意下面几点
- Arrays.asList 转换完成后的 List 不能再进行结构化的修改,什么是结构化的修改?就是不能再进行任何 List 元素的增加或者减少的操作。
public static void main(String[] args) {
Integer[] integer = new Integer[] { 1, 2, 3, 4 };
List integetList = Arrays.asList(integer);
integetList.add(5);
}
结果会直接抛出
Exception in thread "main" java.lang.UnsupportedOperationException
我们看一下源码就能发现问题
// 这是 java.util.Arrays 的内部类,而不是 java.util.ArrayList
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
继承 AbstractList 中对 add、remove、set 方法是直接抛异常的,也就是说如果继承的子类没有去重写这些方法,那么子类的实例去调用这些方法是会直接抛异常的。
下面是AbstractList中方法的定义,我们可以看到具体抛出的异常:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
虽然 set 方法也抛出了一场,但是由于 内部类 ArrayList 重写了 set 方法,所以支持其可以对元素进行修改。
- Arrays.asList 不支持基础类型的转换
Java 中的基础数据类型(byte,short,int,long,float,double,boolean)是不支持使用 Arrays.asList 方法去转换的