Java泛型类限定类型参数范围需先用声明,再用extends设上界(如T extends Number),不可用super;extends表“上界限定”而非继承,支持多重接口如Serializable & Cloneable。

Java 中定义泛型类并限定类型参数范围,核心是两步:先用
泛型类的基本定义
泛型类在类名后添加尖括号,里面写类型参数(如 T、E、K、V),类内部可用该参数声明字段、方法参数和返回值:
- 类型参数只能是引用类型,不能是基本类型(如 int、char);要用 Integer、Character 等包装类
- 一个类可声明多个类型参数,例如
(常见于 Map) - 静态成员不能直接使用类级别的类型参数(如 static T value 是非法的)
用 extends 限定上界(最常用)
当类中需要调用某类特有方法(比如 doubleValue()、compareTo())时,必须约束 T 的范围,否则编译不通过:
-
public class MaxFinder
:T 只能是 Number 或其子类(Integer、Double、Float 等) -
public interface ComparableList
> :T 必须实现 Comparable 接口,才能安全调用 compareTo() - 多重上界用 & 连接:
,表示 T 必须同时实现两个接口
为什么不能用 super 限定泛型类的类型参数?
super 关键字仅用于通配符(如 ? super String),不能用于类或方法的类型参数声明。也就是说,下面的写法是错误的:
立即学习“Java免费学习笔记(深入)”;
public class Box
如果需要下界语义(如只接受 String 及其父类),应改用通配符配合泛型方法或集合参数,而不是在类定义中硬加 super。
实际例子:带边界的泛型工具类
比如一个通用的最大值查找器,要求输入数组元素能转成 double 比较:
- class MaxUtil
- 方法 public T max(T[] arr) 内部可放心调用 element.doubleValue()
- 传入 Integer[] 或 Double[] 合法;传入 String[] 或 Object[] 编译直接拒绝


















