Java泛型-类型参数化

一. 泛型

解决支持多类型参数的方案:

1, 重载: 在同一个类中,方法名相同,参数不同

不足之处: 代码过于重复

public class Tool{
   public String arrToStr(String[] arr, String symbol){
       String str = "";
       for(String v: arr){
           str += symbol + v;
      }
       return str.substring(symbol.length());
  }
   public String arrToStr(int[] arr, String symbol){
       String str = "";
       for(int v: arr){
           str += symbol + v;
      }
       return str.substring(symbol.length());
  }
   public String arrToStr(double[] arr, String symbol){
       String str = "";
       for(double v: arr){
           str += symbol + v;
      }
       return str.substring(symbol.length());
  }
}

2, 使用Object

好处: 简单

不足: 什么都支持(类型无法得到限制)

public class Tool{
   public String arrToStr(Object[] arr, String symbol){
       String str = "";
       for(Object v: arr){
           str += symbol + v;
      }
       return str.substring(symbol.length());
  }
}

3, 泛型: 广泛的类型(默认为任意类型)

但是泛型可以设置上限(以继承的方式实现)

3.1 定义方法泛型

public class Tool{
   //<X>: 程序员定义的一种数据类型即泛型,泛型名: X
   //X : 默认为Object
   public <X> String arrToStr(X[] arr, String symbol){
       String str = "";
       for(X v: arr){
           str += symbol + v;
      }
       return str.substring(symbol.length());
  }
   
   //设置上限为Number
    public static <X extends Number> String arrToStr(X[] arr, String symbol){
       String str = "";
       for(X v: arr){
           str += symbol + v;
      }
       return str.substring(symbol.length());
  }
}

3.2 类泛型定义

public class Datas <X>{
   private X x;
   public Datas(X x){
       this.x = x;
  }
   public X getX(){
       return x;
  }
   public void setX(X x){
       this.x = x;
  }

   public static void main(String[] args) {
       Datas datas = new Datas(50);
       //不声明: X为Object
       Datas datas1 = new Datas("哈哈");
       Datas<Car> datas2 = new Datas<>(new Car("吉利",30));
       //声明 X为 Car类型
       Datas<Integer> datas3 = new Datas<>(50);
  }
}

 

 

 

 

posted @ 2024-09-06 08:38  白头吟  阅读(37)  评论(0)    收藏  举报