资讯动态

泛型的使用

发布时间:2026/10/4 17:34:04 来源:尧图企业网站定制
一、泛型类 (Generic Class)定义在类名后面加上T可以是任意大写字母如E、K,V。语法模板public class 类名 T { private T data; // 成员变量可以用 T public T getData() { // 方法返回值可以用 T return data; } public void setData(T data) { // 方法参数可以用 T this.data data; } }你的Result就是一个典型的泛型类public class ResultT { // 1. 这里声明了 T代表整个类都可以用 T private Integer code; private String msg; private T data; // 2. 类内部直接使用 T // 3. 普通成员方法可以直接返回 T 或接收 T不需要再声明 public T getData() { return data; } }二、泛型方法 (Generic Method)定义在方法返回值前面加上T或其他字母。这个方法可以独立于类的泛型存在。关键点即使类本身不是泛型类方法也可以是泛型方法。如果类已经是泛型类方法上的T会遮蔽隐藏类上的T所以静态方法必须自己声明T。1. 静态泛型方法你的success方法// 静态方法不能访问类上的泛型参数必须自己声明 public static T ResultT success(T data) { // ↑ 这里的 T 是声明我这是一个泛型方法我要用到一个类型叫 T ResultT result new Result(); result.setData(data); return result; }解释public static T ResultT success(T data)第一个T是声明告诉编译器我要引入一个类型变量T。ResultT是返回值类型。T data是参数类型。2. 普通成员方法中的泛型方法如果类已经定义了ResultT普通成员方法不需要再加T可以直接用public class ResultT { // ✅ 正确不需要额外声明 T直接用类的 T public T getData() { return data; } // ❌ 错误示例多加了一个 T 会遮蔽类的 T导致类型混乱 public T T getData() { // 这里的 T 是方法自己的 T和类的 T 没有任何关系 } }三、代码速查表结合你的Result位置写法含义类定义public class ResultT声明此类是一个泛型类作用域为整个类成员变量private T data;使用类上声明的T普通成员方法public T getData()直接使用类上的T不需要写T静态方法public static T ResultT success(T data)必须自己声明T这个T与类的T无关四、常见易错点对比错误 1静态方法直接使用类的Tpublic class ResultT { // ❌ 编译错误Non-static type variable T cannot be referenced from a static context public static ResultT success() { return null; } }正确写法public static T ResultT success() { return new Result(); }错误 2成员方法多写了Tpublic class ResultT { // ❌ 语法没错但会导致类型擦除混乱一般不这么写 public T T getData() { return (T) data; // 需要强制转换丢失类型安全 } }错误 3忘记写返回值前的泛型声明// ❌ 如果类不是泛型类这样写会报错 cannot resolve symbol T public ResultT success(T data) { // ... }正确写法类非泛型public T ResultT success(T data) { // ... }五、一句话总结场景是否需要写T示例定义泛型类类名后写Tclass ResultT类成员变量/方法使用类泛型不写T getData()静态方法想要用泛型必须写static T ResultT success(T data)普通方法想引入新的独立泛型写极不推荐E E convert(E e)记忆口诀类上有T成员不用写。静态想用泛自己声明T在前面。有参和无参构造器都是和普通的一样

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑