Java|java泛型方法

Java|java泛型方法

/**
* 测试泛型方法 非静态方法 静态方法
*/
public class Test4 {
//不在类的声明上使用泛型
public <T> void setName(T name){
//在返回值类型前面加<>泛型 泛型T在方法内有效 可以在返回值类型、形参列表和方法体内使用T
System.out.println(name);

public <T> T getName(T name){
return name;

public static void main(String[
args) {
Test4 t4 = new Test4();
t4.setName(123);
//泛型方法在调用时不需要<>声明类型 编译会自行判断
//这里传入123 编译判断为Integer 将T变为该类型
t4.setName(\"asd\");
//每次调用不会互相影响  每次独立判定T的类型
Integer name = t4.getName(455);
//在定义泛型方法时虽然set get方法都是<T> 但两个的T不相干 泛型方法与泛型方法之间不统一类型
System.out.println(name);
String name1 = t4.getName(\"qwe\");
//每次调用不互相影响
System.out.println(name1);


class Test5<T>{
//定义泛型类
private T flag;
public void setFlag(T flag){
//非静态方法 使用外部调用时设定的T类型
this.flag = flag;

public T getFlag(){
//T可以用在返回类型、形参列表和方法体中
return this.flag;

public <T> void printName(T name){
//设定泛型非静态方法 泛型方法中的T不再是泛型类中的T 方法内调用方法的T
System.out.println(name);

public static <T> T getName(T name){
//泛型静态方法无法调用泛型类中的T 必须在方法上定义泛型 方法内也无法使用泛型类的T
return name;

public static void main(String[
args) {
Test5<Integer> i5 = new Test5<>();
//设定类的T为Integer
i5.setFlag(5);
System.out.println(i5.getFlag());
//调用类的T的非静态方法 随类变为了Integer
i5.printName(\"asd\");
//泛型非静态方法 编译时自行判断方法的T 这里没有调用类的Integer
//非静态方法既可以通过泛型类的T设定类型 也可以通过方法声明<T>自己设定
Boolean name = Test5.getName(true);
//泛型静态方法只能通过方法声明T 调用时同样不需要<>设定
if (name){
System.out.println(name);



【Java|java泛型方法】