我有一个包含上限泛型的列表。
List<? extends Number> l = new ArrayList<>();
l.add(new Integer(3)); //ERROR
l.add(new Double(3.3)); // ERROR
我不明白这个问题,因为 Integer 和 Double 扩展了 Number。
最佳答案
List<? extends Number>
并不意味着“一个可以包含 Number
子类的所有对象的列表”,它意味着“一个参数化为一个扩展 Number
的具体类的列表”。这不是您定义的列表本身的内容,而是分配给变量的实际列表对象的参数化类型可以是什么(男孩,这比理解更难解释:))
所以,你可以这样做:
List<? extends Number> l = new ArrayList<Integer>();
List<? extends Number> l = new ArrayList<Double>();
如果您想要一个能够容纳 Number 类或其子类的任何对象的列表,只需这样做:
List<Number> l = new ArrayList<>();
l.add(new Integer(33));
l.add(new Double(33.3d));
(插入值的装箱是不必要的,但为了清楚起见..)
关于java - 为什么不能在上限泛型列表中添加元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383139/