抽象类通过语法限定子类泛型类型上界,强制子类只能传入指定类或接口的子类型(含自身),支持多约束如,编译期校验,不可用super。

在抽象类中用泛型限定符约束子类类型范围,核心是通过 <t extends sometype></t> 语法在类声明时明确类型上界,让编译器强制子类只能传入符合限定条件的具体类型。
用 extends 限定泛型参数的上界
泛型限定符 extends 不仅用于继承,也用于泛型类型约束——它表示“T 必须是某类或接口的子类型(包括自身)”。抽象类声明时加上这个限定,就能从源头控制子类可选的类型范围。
- 写法示例:
abstract class DataProcessor<t extends number></t>表示所有子类必须指定T为Number或其子类(如Integer、Double),不能是String或Object - 若需多个约束,可用
&连接:<t extends comparable> & Cloneable></t>,要求类型既可比较又可克隆 - 限定后,抽象类内部就能安全调用
T所共有的方法,比如doubleValue()(对Number子类有效)
限定符如何影响子类继承
子类继承时必须满足抽象类设定的边界,否则编译不通过。这种约束不是运行时检查,而是编译期强校验。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 合法继承:
class IntProcessor extends DataProcessor<integer></integer>——Integer是Number的子类,符合extends Number - 非法继承:
class StrProcessor extends DataProcessor<string></string>—— 编译报错,因为String不是Number的子类型 - 也可限定为接口:
abstract class EventListener<t extends runnable></t>,子类只能传入实现Runnable的类型
结合抽象方法强化类型契约
限定泛型后,可在抽象方法签名中利用该约束,进一步规范子类行为。
- 例如:
protected abstract T createDefault();要求子类返回一个符合T extends Number的默认实例 - 再如:
public void validate(T value) { if (value.doubleValue() —— 抽象类内直接调用 <code>doubleValue(),依赖的就是extends Number提供的类型保证 - 子类实现时无需重复判断类型,编译器已确保传入值具备所需能力
注意:不能用 super 限定抽象类本身
<t super sometype></t> 是通配符下界语法,适用于变量声明或方法参数,**不能用于类或接口的泛型参数声明**。抽象类的泛型类型参数只支持 extends 上界限定(包括类、接口、多个接口并列)。
- 错误写法:
abstract class Box<t super string></t>—— 编译失败 - 正确替代:若需宽泛接收,应在方法级用通配符,如
void accept(Iterable super Integer> items) - 抽象类自身仍应保持明确上界,以保障内部逻辑的安全性和可读性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










