泛型java中的对方差不能按预期工作 List

泛型java中的对方差不能按预期工作 List,java,generics,contravariance,Java,Generics,Contravariance,没有编译时错误,因为println可以接受任何对象(即使是?也保证与之兼容) 您要查找的错误是 List<? super Number> myNumsContra = new ArrayList<Number>(); myNumsContra.add(2.0F); myNumsContra.add(2); myNumsContra.add(2L); System.out.println(myNumsContra.get(0)); /

没有编译时错误,因为
println
可以接受任何
对象(即使是
也保证与之兼容)

您要查找的错误是

   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

没有编译时错误,因为
println
可以接受任何
对象(即使
也保证与之兼容)

您正在查找的错误是

   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

请参阅javadocs,了解您正在使用的方法为什么
get(0)
应该准确地抛出一个错误?是否正在阅读这篇文章(),其中说明List类是否设置了一个边界,例如?超级T,那么我就不能调用get(0),因为编译器会抛出一个错误。我不明白为什么这需要被否决——我问了一个合理的疑问。这不是堆栈溢出的原因吗?下行投票者认为您是在问为什么调用
get
本身时没有出现错误(可能是因为索引参数类型),而不是问您如何处理结果。您的问题措辞有点误导。请参阅javadocs,了解您正在使用的方法为什么
get(0)
应该准确地抛出一个错误?是否正在阅读这篇文章(),其中说明List类是否设置了一个界限,例如?超级T,那么我就不能调用get(0),因为编译器会抛出一个错误。我不明白为什么这需要被否决——我问了一个合理的疑问。这不是堆栈溢出的原因吗?下行投票者认为您是在问为什么调用
get
本身时没有出现错误(可能是因为索引参数类型),而不是问您如何处理结果。你的问题措辞有点误导人。谢谢,我错过了:)所以这真的意味着它不能分配给类型!不是没有类型转换,不是。@jtkSource:“所以它真的意味着它不能分配给类型”而不是
对象
谢谢我错过了:)所以它真的意味着它不能分配给类型!不是没有类型转换,不是。@jtkSource:“所以它实际上意味着它不能分配给
对象