这篇Java教程基于JDK1.8。教程中的示例和实践不会使用未来发行版中的优化建议。
下界通配符
上界通配符 部分显示:上界通配符将未知类型限制为该类型的特定类型或子类型,并使用extends 关键字表示。类似地,下界通配符将未知类型限制为特定类型或该类型的超类型。
下界通配符使用通配符(’?’)表示,后跟super 关键字,后跟它的下界:<? 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);
}
}
通配符使用指南部分提供了何时使用上界通配符以及何时使用下界通配符的指导。