java泛型多边界限定必须用&连接且类在前接口在后,如;逗号仅用于分隔多个类型参数(如),不能用于同一参数的多边界,否则编译报错。

Java 中泛型的多个边界限定,用 & 连接,**不能用逗号**,且 有严格顺序要求:类必须写在最前面,接口可以跟在后面,任意多个(用 & 分隔)。
语法格式
正确写法:
<t extends a b c></t>
其中:
-
A必须是类(或java.lang.Object,但通常省略),且只能有一个; -
B、C等必须是接口,数量不限; -
extends关键字只写一次,开头统一声明所有边界; - 顺序不能颠倒 —— 类必须在前,接口在后。
为什么不能写成 <t extends a b></t>?
这种写法是错误的,因为逗号在泛型中用于分隔多个类型参数(如 <k v></k>),不是用于限定同一类型参数的多个边界。编译器会报错:unexpected type 或 interface expected here。
实际例子
假设有一个类 Animal,两个接口 Runnable 和 Swimmable:
class Animal { }
interface Runnable { void run(); }
interface Swimmable { void swim(); }
// ✅ 正确:Animal 是类,放在最前;两个接口用 & 连接
class Cage<t extends animal runnable swimmable> {
private T occupant;
void release() {
occupant.run();
occupant.swim();
}
}</t>
使用时,传入的类型必须同时继承 Animal 并实现那两个接口:
class Duck extends Animal implements Runnable, Swimmable { ... }
Cage<duck> cage = new Cage(); // ✅ 合法</duck>
注意事项
- 如果只限定接口,可以省略类(此时默认隐含
Object),例如<t extends serializable comparable>></t>; - 不能重复限定同一个接口(编译报错);
- 类型擦除后,JVM 只保留第一个边界(即
A)作为运行时类型信息,其余接口边界仅用于编译期检查。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











