java泛型通过extends限定上界(如)、? super限定下界(仅通配符),支持多边界(类在前、接口在后)和泛型方法,确保类型安全与方法调用合法性。

Java 中通过类型参数限定符(即泛型边界)来约束泛型类型参数的取值范围,核心是用 extends 声明上界,用 ? super 表达下界(仅限通配符)。这种约束让编译器能验证类型安全,并支持调用边界类型定义的方法。
用 T extends 类或接口 限定上界
这是最常用的方式,表示类型参数必须是某个类的子类,或实现某个接口。注意:这里的 extends 是广义的,既适用于继承也适用于实现。
-
<t extends number></t>:T 只能是Number或其子类(如Integer、Double),方法内可直接调用doubleValue()等 -
<t extends comparable>></t>:T 必须可比较,支持t1.compareTo(t2) -
<t extends runnable></t>:T 实例必须能执行,适合封装任务逻辑
多边界限定:同时满足多个能力
当一个类型需要兼具多种能力时,可用 & 连接多个边界,但需遵守规则:第一个边界必须是类(最多一个),其余必须是接口。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 正确写法:
<t extends number serializable comparable>></t> - 错误写法:
<t extends serializable number></t>(类没放首位)或<t extends number string></t>(不能有两个类) - 效果:方法体内既能调用
doubleValue(),也能序列化、还能比较大小
通配符的上界和下界(? extends 和 ? super)
通配符不用于声明类型参数,而是用在变量、形参、返回值等使用位置,表达更灵活的兼容性语义。
-
List extends Number>:只读语义,可接受List<integer></integer>、List<double></double>,但不能add()(编译器无法确定具体子类型) -
List super Integer>:只写语义,可向其中添加Integer或其子类实例(如1、new AtomicInteger(5)),但读出元素只能当作Object
泛型方法中独立声明带边界的类型参数
泛型方法可脱离所在类是否泛型,自行定义带边界的类型参数,提升复用性和类型安全性。
- 示例:
public static <t extends comparable>> T findMax(List<t> list)</t></t> - 该方法要求传入列表元素类型本身具备可比性,编译器据此允许调用
compareTo(),无需强制转型 - 边界越精准,可用操作越丰富;但过度约束会降低通用性,需结合实际场景权衡
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










