登录
首页 >  文章 >  java教程

如何在 Java 中通过泛型通配符 ? super T 实现能够安全写入子类型对象的集合容器

时间:2026-05-05 22:54:53 383浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个文章开发实战,手把手教大家学习《如何在 Java 中通过泛型通配符 ? super T 实现能够安全写入子类型对象的集合容器》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

使用 ? super T 的核心目的是实现“写入友好”,即安全地向集合中添加类型为 T 或其子类的实例;它表示某未知父类型,允许写入 T 及其子类对象,但读取时只能视为 Object。

如何在 Java 中通过泛型通配符 ? super T 实现能够安全写入子类型对象的集合容器

使用 ? super T 通配符的核心目的,是让一个泛型集合能安全接收类型为 T 或其任意子类的实例——即“写入友好”(write-safe)。

为什么用 ? super T 而不是 ? extends T

? extends T 表示“某个 T 的子类型”,只能读取(读出的对象最多是 T 类型),但不能写入(除了 null);
? super T 表示“某个 T 的父类型(含 T 自身)”,可以安全写入 T 及其子类对象,因为子类对象天然可赋值给父类引用。

典型场景:向集合中添加多种子类型对象

比如有类继承关系:Animal → Dog, Cat,你想把 DogCat 都存进同一个容器,且该容器还能被更通用的代码复用(如只接受 AnimalObject):