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`.
关于java - 泛型 java 中的逆变不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580251/