List<? super Number> myNumsContra = new ArrayList<Number>();
myNumsContra.add(2.0F);
myNumsContra.add(2);
myNumsContra.add(2L);
System.out.println(myNumsContra.get(0)); //should throw error
根据泛型的逆变规则,上面的get(0)调用应该抛出编译错误。但我没有看到这种情况发生。我错过了什么吗?我正在使用Java-8
答案 0 :(得分:4)
没有编译时错误,因为println
可以使用任何Object
(即使?
也保证与之兼容)。
您正在寻找的错误是
Number x = myNumsContra.get(0);
// does not compile, because we cannot know this is really a `Number`.