下界通配符使用 ? super Type 形式,限定泛型为指定类型或其父类,适用于写操作场景。例如 List
Java中的下界通配符(lower bounded wildcard)使用 ? super Type 的形式,用于限定泛型类型必须是某个指定类型或其父类型。它主要用在写操作的场景中,确保数据可以安全地存入集合。
下界通配符的语法是:
? super Type其中 Type 是某个具体类或接口,表示通配符接受的是 Type 或它的任意父类型。
当你需要往一个泛型集合中写入数据时,使用下界通配符可以保证类型安全。例如:
List super Integer> list = new ArrayList因为编译器只知道这个列表是某个 Integer 父类型的列表(可能是 Integer、Number 或 Object),所以你可以安全地放入 Integer 实例,但取出时无法确定具体类型,只能当作 Object 处理。
在 Java 泛型设计中,有一个著名的原则叫 PECS(Producer-Extends, Consumer-Super):
下界通配符正适用于“消费者”角色。典型例子是 Collections.max() 或 Collections.sort() 中的比较器参数:
public static
List这里允许传入能比较 T 或其父类型的比较器,提高了灵活性。比如你可以用 Comparator
下界通配符限制了从集合中读取的能力。虽然你可以添加符合下界的元素,但获取元素时类型信息丢失,只能以 Object 接收。因此它不适合既需要频繁读又需要写的场景。
基本上就这些。下界通配符不是最直观的概念,但它在提升 API 灵活性和类型安全性方面非常有用,特别是在设计通用工具方法时。关键是理解它适合“只写”或“多消费少读”的场景。不复杂但容易忽略细节。