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
最佳答案
没有编译时错误,因为println
可以采用任何Object
(甚至可以保证?
兼容)。
您正在寻找的错误是
Number x = myNumsContra.get(0);
// does not compile, because we cannot know this is really a `Number`.