Java 的泛型程序设计( Generic Programing)

1、泛型类

ArrayList 类可以接受任何类型的参数,所以,取出来的类型肯定就是 Object 类型,这给我们使用带来了不便,因为取出来的都是 Object 对象,当我们想要恢复传入时候的数据类型,我们就必须进行强制类型转换:

   1:  public static void main(String[] args) {
   2:      ArrayList al = new ArrayList();
   3:      al.add("String");
   4:      String str = (String)al.get(0);
   5:  }
泛型的引入,限制的转入参数的数据类型,解决了上述强制类型转换的麻烦:
   1:  public static void main(String[] args) {
   2:      ArrayList
   
   
    
     al = 
    
    new ArrayList
    
    
     
     ();
    
    
   
   
   3:      al.add("String");
   4:      String str = al.get(0);
   5:  }
注意泛型里构造函数的括号依旧在最右边。

值得注意的是,ArrayList 类是 JDK 类库提供的类,然而当我们自己需要编写像 ArrayList 类这样的支持泛型的类,我们该怎么办呢?我们可以参照下面的代码实现:

   1:  class Pair
  
  
   
    {
  
  
   2:      
   3:      private T a;
   4:      private T b;
   5:      
   6:      public Pair(T a, T b) {
   7:          super();
   8:          this.a = a;
   9:          this.b = b;
  10:      }
  11:   
  12:      public T getA() {
  13:          return a;
  14:      }
  15:   
  16:      public void setA(T a) {
  17:          this.a = a;
  18:      }
  19:   
  20:      public T getB() {
  21:          return b;
  22:      }
  23:   
  24:      public void setB(T b) {
  25:          this.b = b;
  26:      }
  27:      
  28:  }
这里定义的 Pair 就是泛型类,使用方法与 ArrayList 类相同。上面中的 T 是类型变量,Java 中的类型变量用 E 表示集合的元素类型,K 和 V 关键字与值的类型, T 表示任意类型(必要时候还可以使用 U、S 来表示任意类型)。

2、泛型方法

泛型方法可以定义在普通类中(当然也可以在泛型类中),示例如下:

   1:  class Tools{
   2:      
   3:      public static 
  
  
   
   T getMiddle(T[] a){
  
  
   4:          return a[a.length/2];
   5:      }
   6:      
   7:  }
注意到类型变量放在了返回类型的前面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值