java - 泛型 java 中的逆变不能按预期工作

标签 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

最佳答案

没有编译时错误,因为 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/

相关文章:

java - 自定义日志记录以在运行时收集消息

java - 如何从 XML 生成 Java 对象?

java - Spring Boot Web 应用程序 : JSP page throws 404 error

java - 如何在 Java 中声明一个 Class<?> 对象,它是一个枚举和一个接口(interface)

c# - 如何在 C# 泛型中将子类转换为父类

java - 如何从for循环中依次显示每个值

C#:私有(private)内部接口(interface)是否可能?

java - 如何在 Jackson 中为泛型创建自定义反序列化器?

typescript - 如何使幻像类型与 TypeScript 中的方法一起使用?

c# - 当逆变导致歧义时,没有警告或错误(或运行时失败)