项目开发中需要将一个数组转换为集合,想到的用Arrays.asList()方法,生成的集合在调用add()方法,向里面添加元素的时候,报java.lang.UnsupportedOperationException: null异常。通过查看源码,最后将问题解决。
业务代码
List<String> title = Arrays.asList();
title.add("1");
异常信息
java.lang.UnsupportedOperationException: null
异常分析
Arrays.asList()的jdk源码如下:
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
}
由源码中可以发现,Arrays.asList()是调用了,Arrays的静态内部类创建一个集合对象,该静态内部类集成了AbstractList<E>抽象类,但是静态内部类没有重写add(),set(),remove()等方法,直接调用的这些方法的时候,就相当于调用AbstractList<E>抽象类的方法,JDK中直接调用AbstractList<E>抽象类的这些方法就会报java.lang.UnsupportedOperationException异常。
AbstractList<E>的add()方法JDK源码
/* @throws UnsupportedOperationException if the {@code add} operation
* is not supported by this list
*
*/
public boolean add(E e) {
add(size(), e);
return true;
}
解决方法:
List<String> title1 = Arrays.asList(arr);
List<String> title = new ArrayList<>(title1);