泛型 static <T> 用法
public Result<T> test(){ return null; }
public <T> Result<T> test(){ return null; }
public static <T> Result<T> test(){ return null; }
第一次没理解上面非静态方法可有或可无, 静态方法必须有,此次总结一下
一、定义方法代码示例
package com.pd.shop.common;
import lombok.Data;
@Data
public class Result1<T> {
private T Data;
Result1(T t) {
this.Data = t;
}
public Result1<T> Result1_A(T t) {
return new Result1(t);
}
public <T> Result1<T> Result1_A1(T t) {
return new Result1(t);
}
public static <T> Result1<T> Result1_B(T t) {
return new Result1(t);
}
}
分析:
1.前置条件, Result1是非静态类, 且传入泛型T, T是非静态类型
2.非静态方法Result1_A或Result1_A1,为什么可有或可无?
因为"非静态方法"的调用"需要"进行类的实例化,当实例化后, 已经可以"确定"T的类型,所以在调用非静态方法Result1_A或Result1_A1时,声明可有或可无
2.静态方法Result1_B,为什么需要有?
因为"静态方法"的调用需要"不需要"进行类的实例化, 也就"不确定"T的类型, 所以在调用静态方法Result1_B时,需要声明
二、调用方法代码示例
package com.pd.shop.common;
import lombok.Data;
@Data
public class Result2 {
public Result1<String> Result2_A(String t) {
return new Result1<String>().Result1_A(t);
}
public <T> Result1<T> Result2_A1(T t) {
return new Result1<T>().Result1_A(t);
}
public Result1<String> Result2_B(String t) {
return Result1.Result1_B(t);
}
public <T> Result1<T> Result2_B1(T t) {
return Result1.Result1_B(t);
}
}
说明
1.类实例化的非静态方法调用
2.类不实例化的静态方法调用