Java泛型通过带边界的类型参数约束对象能力:T extends接口/类限定行为或基础方法,多边界用&连接(首为类),? extends用于只读集合。

在泛型方法中让传入对象“具备某种能力”,本质是要求该对象所属类型实现特定接口(如 Comparable)、继承某个类(如 Number),或同时满足多个契约。Java 通过 带边界的类型参数(Bounded Type Parameters)实现这一约束,核心是用 extends 关键字声明上界。
用 T extends 接口 要求实现某行为
当需要对象能比较、序列化、或有自定义操作时,就让它实现对应接口:
-
<T extends Comparable<T>>:确保T可比较,方法内可直接调用t1.compareTo(t2) -
<T extends Serializable>:保证类型支持序列化,适合缓存或网络传输场景 -
<T extends Runnable>:表明传入对象可执行,适合任务调度类方法
用 T extends 类 限定基础能力
若需调用父类定义的方法(如数值转换、格式化),就绑定到具体类:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
<T extends Number>:允许安全调用doubleValue()、intValue()等 -
<T extends Throwable>:用于统一异常处理逻辑,可调用getMessage()或getCause() - 注意:
extends在这里泛指“继承或实现”,所以接口和类都适用
多边界:同时满足多个能力
一个类型可能既要可比较,又要可序列化,这时用 & 连接多个边界:
立即学习“Java免费学习笔记(深入)”;
- 语法:
<T extends Comparable<T> & Serializable> - 规则:第一个边界必须是类(最多一个),后续必须是接口
- 效果:方法内既能调用
compareTo(),也能安全写入ObjectOutputStream
方法参数中用通配符表达“只读”能力约束
当不操作类型本身,而是处理集合且只需读取时,用 ? extends 更灵活:
-
void printAll(List<? extends Number> list):接受ArrayList<Integer>、LinkedList<Double>等 - 可安全调用
list.get(i).doubleValue(),因为所有元素都保证是Number或其子类 - 但不能往里 add 新元素——编译器不知道具体是哪种 Number 子类型

















