【发布时间】:2014-03-05 00:46:51
【问题描述】:
假设我们有 2 个不同的列表。
列表 1 可以采用任何 Number 参数(包括 int、double、float 以及所有其他 Number 子类)。
List<Number> l1 = new ArrayList();
所以这样做非常好。
l1.add(123);
l1.add(123.3456);
列表 2 扩展了数字。问题是我不能添加任何东西,我不明白为什么。另外,为什么我需要一个 而不是仅仅创建一个可以存储任何子类的层次结构中最高的类的列表(如列表 1)?
List<? extends Number> l2 = new ArrayList();
l2.add(123); //Error, although Integer is a subclass of Number
l2.add(new Integer(123)); // Wrappers don't work either
l2.add(123.456); //Error again
【问题讨论】:
-
查找术语 PECS(生产者扩展,消费者超级)。 Java 变体“声明”是在使用时完成的,而不是类定义时
标签: java generics covariance