Java Generic(-)なぜ汎用型を使用する必要があるのか


汎用型:パラメータ化タイプ、すなわちタイプの不確実性のため、あるタイプに代わるパラメータを導入することができる.
なぜ汎用型が必要なのでしょうか.次の例を示します.

  
  
  
  
  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.  

     このプログラムでは、2つのリロード方法printMeがあります.1つのパラメータはCharacter[]で、もう1つはInteger[]で、具体的な方法の処理部分は基本的に一致しています.ただ、配列の要素のタイプが異なるだけです.2つの方法を定義して処理する必要があります.将来、印刷String、Doubleを追加する場合は、考えてみてください.あるユーザがタイプのJavaオブジェクトデータをカスタマイズする場合,printMe(Type)をn回以上リロードするのではないか.  Array)この方法
    考えてみてください.もし私たちが伝達する配列の中の要素を表すタイプを表すことができて、1つのパラメータが将来伝達する値を表すようにすれば、私たちはこのprintMe()方法をリロードする必要はありません.だからパラメータ化タイプ(汎用型)は運に応じて生まれました.
    以下は、汎用メソッドを使用して改造されたコードです.

  
  
  
  
  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()メソッドを実現するだけでよい.拡張性に優れている.
本文は“hubert_guo”のブログから出て、転載して作者と連絡してください!