泛型java中的逆变法并不像预期的那样工作

时间:2017-10-05 07:34:00

标签: java generics contravariance

   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

1 个答案:

答案 0 :(得分:4)

没有编译时错误,因为println可以使用任何Object(即使?也保证与之兼容)。

您正在寻找的错误是

Number x = myNumsContra.get(0);
// does not compile, because we cannot know this is really a `Number`.