java泛型边界允许指定一个类和多个接口,语法为,其中类上界最多一个且须居首,后续均为接口;接口顺序任意但不可重复或混入第二个类。

Java 泛型边界支持同时指定一个类和多个接口,语法是 <t extends></t>。这种写法表示类型参数 T 必须是该类的子类(或其本身),并且同时实现所有列出的接口。
必须遵守的语法规则
- 类上界最多只能有一个,且必须放在最前面
- 后续所有边界都必须是接口,用
&连接 - 接口之间顺序可以任意,但不能重复或混入第二个类
例如:
class Animal { }
interface Flyable { void fly(); }
interface Swimmable { void swim(); }
// ✅ 合法:Animal 是唯一类上界,Flyable 和 Swimmable 是接口
class Creature<t extends animal flyable swimmable> {
T instance;
void doBoth() {
instance.fly(); // 编译器知道 T 有 fly()
instance.swim(); // 也知道有 swim()
instance.toString(); // Animal 继承自 Object,toString 可用
}
}</t>
常见错误写法
-
<t extends flyable animal></t>❌ 类不在首位,编译失败 -
<t extends animal runnable string></t>❌String是类,不能出现在接口位置 -
<t extends comparable cloneable serializable></t>✅ 全是接口,合法(首项无类时可省略extends的类)
实际使用建议
- 如果组合逻辑固定(比如“可序列化+可比较+可克隆”),推荐先定义组合接口:
interface PersistentComparable extends Serializable, Comparable<persistentcomparable>, Cloneable {} class Dao<t extends persistentcomparable> { ... }</t></persistentcomparable>这样语义清晰,也便于复用和维护。
- 在泛型方法中同样适用:
<t extends number comparable>> T max(T a, T b) { return a.compareTo(b) >= 0 ? a : b; }</t>
类型擦除后,T 会被替换为第一个上界(这里是 Animal),但编译器仍会检查所有接口方法是否可用——这是靠类型系统保障的,不是运行时判断。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











