问题:使用 Collections.emptyList() 声明对象,调用 add 方法报错。
List<String> list = Collections.emptyList();
list.add("a");
报错信息:java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148)
报错截图
报错原因
需要了解 Collections.emptyList();
内部实现。
首先创建一个对象 new EmptyList<>() 。
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
然后调用 EmptyList 类里的 add 方法,而 EmptyList 类 没有重写 add 方法,因此使用其父类的 add 方法,而父类 AbstractList 的 add 方法内部实现是抛异常,所以最后报错。
private static class EmptyList<E>
extends AbstractList<E>
implements RandomAccess, Serializable {
...
}
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
...
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
...
}
解决方案
如果要调用 add 方法,就声明一个具体的实现类。
List<String> list = new ArrayList<>();
list.add("a");