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");

原文链接:https://blog.itblood.com/1868.html,转载请注明出处。
0
仙帝再临V0.9作弊版 [2+4G] [国产RPG]
仙帝再临V0.9作弊版 [2+4G] [国产RPG]
8分钟前 有人购买 去瞅瞅看

站点公告

显示验证码
没有账号?注册  忘记密码?