Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
Upper Bounded Wildcards 部分显示了上界通配符将未知类型限制为特定类型或其子类型,并使用 extends 关键字表示。以类似的方式,lower bounded (下界) 通配符将未知类型限制为特定类型或其 super type (超类)。
下界通配符表示为通配符( '?' ),后跟 super 关键字,后跟 lower bound (下界):<? super A>。
假设你要编写一个将 Integer 对象放入列表的方法。为了最大限度地提高灵活性,你希望该方法能够处理 List<Integer>,List<Number> 和 List<Object> - 任何可以保存 Integer 值的列表。
要编写适用于 Integer 列表和 Integer 的超类型(例如 Integer,Number,和 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 部分提供了有关何时使用上界通配符以及何时使用下界通配符的指导。