欢迎光临散文网 会员登陆 & 注册

java泛型方法

2022-07-16 08:55 作者:虚云幻仙  | 我要投稿

/**
* 测试泛型方法 非静态方法 静态方法
*/

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泛型方法的评论 (共 条)

分享到微博请遵守国家法律