今天爱分享给大家带来java.lang.UnsupportedOperationException at java.util.AbstractList.add【解决办法】,希望能够帮助到大家。
问题:使用 Collections.emptyList() 声明对象,调用 add 方法报错。
Listlist = 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 finalList emptyList() { return (List ) EMPTY_LIST; }
然后调用 EmptyList 类里的 add 方法,而 EmptyList 类 没有重写 add 方法,因此使用其父类的 add 方法,而父类 AbstractList 的 add 方法内部实现是抛异常,所以最后报错。
private static class EmptyListextends AbstractList implements RandomAccess, Serializable { ... } public abstract class AbstractList extends AbstractCollection implements List { ... public boolean add(E e) { add(size(), e); return true; } public void add(int index, E element) { throw new UnsupportedOperationException(); } ... }
解决方案
如果要调用 add 方法,就声明一个具体的实现类。
Listlist = new ArrayList<>(); list.add("a");