我有这种情况,但为什么java不尊重类层次结构?
import ...
public class GenericsTest {
public static void main(String[] args) {
List<Integer> myList = new ArrayList<Integer>();
myList.add(1);
myList.add(new Integer(2));
new GenericsTest().doInsert(myList);
}
private void doInsert(List<? extends Number> myList) { // Number <- Integer
myList.add(new Integer(1)); // This don't compiles
}
}
有人能解释一下吗? 谢谢!!!
最佳答案
泛型中的通配符并不意味着“任何”,而是意味着“我不知道”。所以List<? extends Number>
不是“可以容纳任何扩展数字的列表”。它是“一系列扩展了数字的东西,但我不知道它们是什么。”因此向其中添加 Integer 是非法的,因为您不知道 Integer 是否是扩展此列表中的数字的东西。扩展 Number 的任何内容的列表就是 List<Number>
.
关于java - 面向对象/数字泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121230/