Java Generic(-) 为何须要使用泛型

泛型:参数化类型,即因为类型的不肯定性,咱们能够引入一个参数来表示代替某种类型.数组

为何须要泛型呢?看如下例子:ide

  
  
  
  
  1. /** 
  2.  *  
  3.  */ 
  4. package com.skywares.generic; 
  5.  
  6. /** 
  7.  * @author Administrator 
  8.  *  
  9.  */ 
  10. public class PrintArray { 
  11.  
  12.     /** 
  13.      * @param args 
  14.      */ 
  15.     public static void main(String[] args) { 
  16.  
  17.         Integer[] iray = { 1234 }; 
  18.         Character[] cray = { 'a''b''c''d' }; 
  19.  
  20.         printMe(iray); 
  21.         printMe(cray); 
  22.  
  23.     } 
  24.  
  25.     private static void printMe(Character[] cray) { 
  26.         for (Character x : cray) { 
  27.             System.out.println(x); 
  28.         } 
  29.     } 
  30.  
  31.     private static void printMe(Integer[] iray) { 
  32.         for (Integer x : iray) { 
  33.             System.out.println(x); 
  34.         } 
  35.     } 
  36.  

     在这段程序中,咱们有两个重载的方法printMe,一个须要的参数是Character[],另外一个是Integer[],具体的方法处理部分基本一致,只是只为数组中的元素类型不一样,咱们就须要为它定义两个方法来处理,试想一下,若是未来要增长一个打印String, Double, 某一用户自定义类型的Java对象数据时,咱们岂不是要n屡次地去重载printMe(Type  array)这个方法.spa

    试想一下,若是咱们可以一种类型去表明要传入地数组中的元素,就像一个参数去表明未来要传递过来的值,那么,咱们就能够不用去重载这个printMe()方法了.因此参数化类型(泛型)就应运而生了.对象

    如下是使用泛型方法改造后的代码:string

  
  
  
  
  1. /** 
  2.  *  
  3.  */ 
  4. package com.skywares.generic; 
  5.  
  6. /** 
  7.  * @author Administrator 
  8.  * 
  9.  */ 
  10. public class PrintArrayUseGeneric<T> { 
  11.  
  12.     /** 
  13.      * @param args 
  14.      */ 
  15.     public static void main(String[] args) { 
  16.         // TODO Auto-generated method stub 
  17.         Integer[] iray = { 1234 }; 
  18.         Character[] cray = { 'a''b''c''d' }; 
  19.         String[] sray = {"ab","bc","cd"}; 
  20.          
  21.         printMe(iray); 
  22.         printMe(cray); 
  23.         printMe(sray); 
  24.     } 
  25.      
  26.     private static <E> void printMe(E[] tray) 
  27.     { 
  28.         for(E e : tray) 
  29.         { 
  30.             System.out.print(e); 
  31.         } 
  32.         System.out.println(); 
  33.     } 
  34.  

     若是未来有用户自定义的类要进行打印的话,只须要这个类实现自已的toString()方法便可.可扩展性极好.it

相关文章
相关标签/搜索