Java 通用通配符限制在列表中

标签 java generics

我正在尝试理解 Java 泛型,但我对有界通配符感到困惑。我正在使用 Guidelines for Wildcard Use 中的层次结构并添加了一个继承自 EvenNumber 的 PositiveEvenNumber 类。

    List<? super EvenNumber> xn = new ArrayList<NaturalNumber>();
    xn.add(new NaturalNumber(35));  // compile-time error
    xn.add(new EvenNumber(-70));
    xn.add(new PositiveEvenNumber(70));
    xn.add(new Object());  // compile-time error

为什么第一行可以编译?第二行,NaturalNumber 不是 EvenNumber 的父级吗,为什么不能添加它?

谢谢!

最佳答案

一个List<? super EvenNumber>是一些特定类型的列表,前提是该类型是 EvenNumber 的父类(super class)型.

因此,它可能是 List<EvenNumber> ,在这种情况下您无法添加 NaturalNumber .

这也意味着您无法从列表中读取任何内容(Object 除外),因为您不知道列表实际包含什么类型。 (甚至可能是 List<Object> )

关于Java 通用通配符限制在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782113/

相关文章:

java - 线程 “main”中的异常java.lang.NoClassDefFoundError : javapasswords in Linux [closed]

java - JFrame 未出现在鼠标单击位置(包括 SSCCE)

android - 在构造函数 Kotlin 中使用泛型作为参数

Java 'T extends' 'hello-world' 无法编译

java - 创建图像的可点击按钮

java - 通过并发增加磁盘读取吞吐量

java - JFreeChart如何绘制有序线

c# - 为什么这种隐式转换不起作用?

java - 在 java 中调用通用 protobuffer 类的 parseFrom() 方法

C# 泛型集合