通配符,添加到列表会抛出UnsupportedOperationException

时间:2016-02-01 08:38:44

标签: java generics

public static void wildCard2(List<? super Base> lst){
    for (int i=0; i<2; i++){
        System.out.println(lst.get(i));
    }
    lst.add(new Base());

}

如上面的代码所示,我有一个名为Base的类。 任何人都可以解释为什么在RunTime失败并抛出UnsupportedOperationException

2 个答案:

答案 0 :(得分:1)

List<E>接口上定义的add(E e)方法被指定为可选操作。

如果您在运行时获得UnsupportedOperationException,则表示您正在使用的List实施而非支持此操作。

它可能是一种不可修改的类型,通过调用Collections.unmodifiableList(),一个Guava ImmutableList的实例或其他完全来创建。检查运行时类型以查找:

System.out.println(lst.getClass().getName());

答案 1 :(得分:0)

您不能.add()来自此类List,您可以将列表副本创建为ArrayList等已知可修改的实现。