java.lang.UnsupportedOperationException at java.util.AbstractList.add【解决办法】

今天爱分享给大家带来java.lang.UnsupportedOperationException at java.util.AbstractList.add【解决办法】,希望能够帮助到大家。

问题:使用 Collections.emptyList() 声明对象,调用 add 方法报错。

List 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  List emptyList() {
    return (List) EMPTY_LIST;
}

然后调用 EmptyList 类里的 add 方法,而 EmptyList 类 没有重写 add 方法,因此使用其父类的 add 方法,而父类 AbstractList 的 add 方法内部实现是抛异常,所以最后报错。

private static class EmptyList
        extends 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 方法,就声明一个具体的实现类。

List list = new ArrayList<>();
list.add("a");

人已赞赏
Java

jar中没有主清单属性【解决办法】

2020-11-19 23:06:02

Java

spring.jpa.open-in-view is enabled by default. 【解决办法】

2020-11-20 11:57:46

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
'); })();