java泛型多重边界要求类上界必须排在extends后首位且唯一,其余均为接口并用&连接,类型擦除以首个边界为准,仅支持extends统一声明。

Java 泛型中多个边界(Multiple Bounds)的顺序有明确且强制的语法规则,不是随意排列的。
类上界必须排在最前面
如果多个边界中包含一个类(或抽象类),它必须且只能有一个,并且必须写在 extends 后的第一个位置。编译器会直接拒绝不符合该顺序的写法。
- ✅ 正确:
<t extends number comparable> & Serializable></t> - ❌ 错误:
<t extends comparable> & Number></t>(类没在首位) - ❌ 错误:
<t extends number string></t>(String 是类,不能作为第二个类出现)
接口可以多个,但只能跟在类后面
除首个类型外,其余所有边界都必须是接口,并用 & 连接。接口之间顺序无关紧要,编译器不校验先后逻辑,只检查是否全是接口。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- ✅ 正确:
<t extends list> & RandomAccess & Cloneable></t> - ✅ 正确:
<t extends runnable serializable autocloseable></t>(无类时,首个接口即为第一边界) - ❌ 错误:
<t extends list> & ArrayList<string>></string></t>(ArrayList 是具体类,不允许出现在第二位)
类型擦除以第一个类型为准
泛型在运行时会被擦除,而擦除后的类型就是 extends 后从左到右第一个出现的类型,不管它是类还是接口。这个“第一”完全由源码书写顺序决定。
-
<t extends number comparable>></t>→ 擦除为Number -
<t extends comparable> & Serializable></t>→ 擦除为Comparable -
<t extends object serializable></t>→ 擦除为Object(即使 Object 是隐式上界,显式写出就占首位)
不能混用两个类,也不能省略 extends
多重边界必须统一用 extends 引导,不能拆成 super 或其他关键字;也不支持类似 super A & B 的混合写法。Java 不允许一个类型参数同时有上界和下界。
- ✅ 唯一合法形式:
<t extends a b c></t> - ❌ 所有以下均非法:
<t super a b></t>、<t extends a super b></t>、<t extends a b></t>(逗号不合法,必须用 &)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










