文档

Java™ 教程-Java Tutorials 中文版
下界通配符
Trail: Learning the Java Language
Lesson: Generics (Updated)
Section: Wildcards

下界通配符

Upper Bounded Wildcards 部分显示了上界通配符将未知类型限制为特定类型或其子类型,并使用 extends 关键字表示。以类似的方式,lower bounded (下界) 通配符将未知类型限制为特定类型或其 super type (超类)

下界通配符表示为通配符( '?' ),后跟 super 关键字,后跟 lower bound (下界)<? super A>


注意: 你可以指定通配符的上界,也可以指定下界,但不能同时指定两者。

假设你要编写一个将 Integer 对象放入列表的方法。为了最大限度地提高灵活性,你希望该方法能够处理 List<Integer>List<Number>List<Object> - 任何可以保存 Integer 值的列表。

要编写适用于 Integer 列表和 Integer 的超类型(例如 IntegerNumber,和 Object)列表的方法,你可以指定 List<? super Integer>。术语 List<Integer>List<? super Integer> 更具限制性,因为前者仅匹配类型 Integer 的列表,而后者匹配任何 Integer 的超类型的列表。

以下代码将数字 1 到 10 添加到列表的末尾:

public static void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++) {
        list.add(i);
    }
}

Guidelines for Wildcard Use 部分提供了有关何时使用上界通配符以及何时使用下界通配符的指导。


Previous page: Unbounded Wildcards
Next page: Wildcards and Subtyping