当前位置:首页 > 文章列表 > 文章 > java教程 > 下界通配符 ? super T 如何安全写入集合

下界通配符 ? super T 如何安全写入集合

2026-05-16 20:45:31 0浏览 收藏
下界通配符 `? super T` 是 Java 泛型中实现安全写入的关键机制——它允许你向集合中添加类型为 `T` 或其任意子类的实例,同时由编译器在编译期严格把关,确保每次 `add()` 都符合类型安全;其原理源于继承关系的天然兼容性(如 `Integer` 可赋值给 `Number` 引用),完美践行 PECS 原则中“Consumer 使用 `super`”的设计哲学,让你既能放心写入,又无需牺牲类型安全。

下界通配符 ? super T_下界通配符如何实现向集合安全写入特定类型变量

下界通配符 ? super T 的核心作用,是让一个泛型集合能安全接收类型为 T 或其任意子类的实例——也就是“写入友好”。它不改变集合底层行为,而是通过编译期类型检查,确保每次 add() 都不会破坏类型安全。

它为什么能安全写入 T 及其子类

编译器知道:实际传入的集合(比如 ListList)的元素类型,一定是 T 的某个父类(含 T 自身)。而 Java 的继承规则保证——T 及其子类对象,天然可以赋值给父类引用。

  • IntegerNumber 的子类 → 可以存进 List
  • DogAnimal 的子类 → 可以存进 List
  • StringInteger 没有继承关系 → 不能往 List 里加 "abc",编译直接报错

典型写法:泛型工具方法 + ? super T

这是它最实用的场景。方法只关心“往里放”,不关心“从哪来”,也不承诺“能读出什么具体类型”: