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`.

09-07 00:21