本教程是针对JDK 8编写的。本页描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的概述。
请参阅JDK发行说明,了解有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息。
在上界通配符部分中,我们介绍了上界通配符可以限制未知类型为特定类型或该类型的子类型,并且使用extends关键字表示。类似地,下界通配符可以限制未知类型为特定类型或该类型的超类型。
使用通配符字符('?'),后面跟随super关键字和其下界来表示下界通配符:<? super A>。
假设您想编写一个将Integer对象放入列表的方法。为了最大化灵活性,您希望该方法适用于List<Integer>、List<Number>和List<Object>,即能够保存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); } }
在通配符使用指南部分,我们提供了关于何时使用上界通配符和何时使用下界通配符的指导。