18---java中泛型03(泛型的其他应用)

来源:互联网 发布:华为工业级网络路由器 编辑:程序博客网 时间:2024/06/05 08:33
 

1、泛型接口:
 interface Info<T>{//在接口上定义泛型
  public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
  }
 class InfoImpl implements Info{
  public String getVar(){
   return null;
   }
  }
 以上的操作,并不是一个子类实现泛型的最好操作,最好在实现的时候也
 指定其具体的泛型类型;

 泛型接口实现的两种方式:
 1:定义子类:在子类的定义上也声明泛型类型
  interface Info<T>{//在接口上定义泛型
   public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
   }
   
  class InfoImpl<T> implements Info<T>{
   private T var;
   
   public InfoImpl(T var){
    this.var=var;
    }
   public void setVar(T var){
    this.var=var;
    }
   public T getVar(){
    return this.var;
    }
   }
   
  public class Demo{
   public static void main(String args[]){
    Info<String> i=null;
    i=new InfoImpl<String>("lid");
    System.out.print("内容:"+i.getVar());
    }
   }
 2、如果现在实现接口的子类不想使用泛型声明,则在实现接口的时候直接指定红啊
  其具体的操作类型即可;
   interface Info<T>{//在接口上定义泛型
    public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
    }
    
   class InfoImpl implements Info<String>{
    private String var;
    
    public InfoImpl(String var){
     this.var=var;
     }
    public void setVar(String var){
     this.var=var;
     }
    public String getVar(){
     return this.var;
     }
    }
    
   public class Demo{
    public static void main(String args[]){
     Info i=null;
     i=new InfoImpl("lid");
     System.out.print("内容:"+i.getVar());
     }
    }

2、泛型方法:
 泛型方法所在的类是不是泛型类是没有关系的;
 泛型方法:
  class Demo01{
   public <T> T fun(T t){//可以接受任意数据类型
    return t;
    }
   }

  public class Demo{
   public static void main(String args[]){
    Demo01 d=new Demo01();//实例化一个对象
    String str=d.fun("lid");//传递字符串
    int i=d.fun(20);//传递整数
    System.out.println(str);
    System.out.println(i);
    }
   }

3、通过泛型方法返回泛型类的实例
 因为之前的代码中可以发现,只要在方法中定义了泛型操作,则可以传递任意的数据类型;
  class Info<T extends Number>{
   private T var;
   public T getVar(){
    return this.var;
    }
   public void setVar(T var){
    this.var=var;
    }
   public String toString(){
    return this.var.toString();
    }
   }
  public class Demo{
   public static void main(String args[]){
    Info<Integer> i=fun(30);
    System.out.println(i);
    }
   public static <T extends Number> Info<T> fun(T param){
    Info<T> temp=new Info<T>();
    temp.setVar(param);
    return temp;
    }
   }

4、使用泛型统一传入参数的类型
 class Info<T>{
  private T var;
  public T getVar(){
   return this.var;
   }
  public void setVar(T var){
   this.var=var;
   }
  public String toString(){
   return this.var.toString();
   }
  }
 public class Demo{
  public static void main(String args[]){
   Info<String> i1=new Info<String>();
   Info<String> i2=new Info<String>();
   i1.setVar("Hello");
   i2.setVar("girls");
   add(i1,i2);
   }
  public static <T> void add(Info<T> i1,Info<T> i2){
   System.out.println(i1.getVar()+" "+i2.getVar());
   }
  }
 注:add(Info<T> i1,Info<T> i2)泛型必须统一;

5、泛型数组:

 public class Demo{
  public static void main(String args[]){
  Integer i[]=fun1(1,2,3,4,5,6);
  fun2(i);
  }
  
  public static <T> T[] fun1(T...arg){//接收可变参数
   return arg;
   }
  public static <T> void fun2(T param[]){
   System.out.println("接收泛型数组");
   for(T t:param){
     System.out.print(t+"、");
    }
   }
 }

6、泛型的嵌套设置:
 再设置一个泛型的同时指定另一个泛型;
  class Info<T,V>{//接收两个泛型类型
   private T var;
   private V value;
   public Info(T var,V value){
    this.setVar(var);
    this.setValue(value);
    }
   public void setVar(T var){
    this.var=var;
    }
   public void setValue(V value){
    this.value=value;
    }
   public T getVar(){
    return this.var;
    }
   public V getValue(){
    return this.value;
    }
   }
   
  class Demo01<S>{
   private S info;
   public Demo01(S info){
     this.setInfo(info);
    }
   public void setInfo(S info){
    this.info=info;
    }
   public S getInfo(){
    return this.info;
    }
   }
  public class Demo{
   public static void main(String args[]){
    Demo01<Info<String,Integer>> d=null;
    Info<String,Integer> i=null;
    i=new Info<String,Integer>("lid",20);
    d=new Demo01<Info<String,Integer>>(i);
    System.out.println("内容一:"+d.getInfo().getVar());
    System.out.println("内容二:"+d.getInfo().getValue());
    
    }
   }


 

原创粉丝点击