Java中extends用于泛型上界限定,既支持类继承也支持接口实现;单上界如<T extends Number>,多上界要求类在前且唯一,如<T extends Date & Serializable & Cloneable>;通配符? extends X仅允许读取、禁止写入(null除外),确保类型安全。

Java 中用 extends 限制泛型上界,是为了让类型参数只能是某个类、接口或其子类型,从而在编译期保证类型安全,并允许调用上界类型定义的方法。
泛型类/方法中用 <T extends X> 声明上界
这是最常用的方式,适用于类、接口或方法的类型参数定义。这里的 extends 是广义的:既表示继承类,也表示实现接口。
- 单上界:只接受某类或其子类(如
Number)或某接口及其实现类(如Comparable) - 多上界:用
&连接多个约束,但类必须排第一位,且只能有一个类 - 示例:
class Processor<T extends Date & Serializable & Cloneable>合法;T extends Runnable & Date编译失败
通配符中用 ? extends X 表示上界通配符
用于变量声明、方法参数等“一次性”场景,强调“只读”——即可以安全地从集合中获取元素,返回类型为上界类型(如 Number),但不能添加除 null 外的任何对象。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
List<? extends Number>可接收ArrayList<Integer>、LinkedList<BigDecimal> -
getValue()方法返回的是Number,不是具体子类型 - 即使
String是 final 类,List<? extends String>语法合法,但实际只能指向List<String>,且仍禁止add()
上界限定的核心作用与限制
上界让泛型更安全、更灵活,但也要注意它的边界行为:
立即学习“Java免费学习笔记(深入)”;
- 支持调用上界类型声明的方法(如
doubleValue()、compareTo()) - 不支持向泛型容器中写入(尤其是通配符场景),因为编译器无法确认具体类型是否兼容
- 泛型类本身不支持
super下界,下界仅用于通配符(? super T)

















