隨筆-159  評論-114  文章-7  trackbacks-0

           傳統我們都是定一個類型,帶T的

          public class RandomSelection<T> {

            
          private java.util.Random random = new Random();

            
          private ArrayList<T> list;

            
          public RandomSelection() {

               list 
          = new ArrayList<T>();

            }


            
          public void add(T element) {

               list.add(element);

            }


            
          public T getRandomElement() {

               
          int index = random.nextInt(list.size());

               
          return list.get(index);

            }



          }


          直接來使用。當我們new RandomSelection<String>()  new RandomSelection<Integer>() 的時候,里面的方法的類型,也就確定了。

          public interface ISomeReason<extends Enum<X>> {

             
          public X getImplClassType();

          }

          實現一個子類。這里看到繼承是傳入了接口泛型中的X參數,參數就是實現類自己的類型。

          public enum ATypeReason implements ISomeReason<ATypeReason> {

             ABC(
          1),
             DEF(
          2),

             ;
             
          int index;

             
          private ATypeReason(int param)
             
          {
                
          this.index = param;
             }


             
          public int getIndex()
             
          {
                 
          return this.index;
             }


             @Override
             
          public ATypeReason getImplClassType() {
                
          return this
             }


          }

          你也可以直接實現,不傳入X,那么在使用這個類型的實例去傳入某一個指定類型的方法參數時,會提示錯誤,不利于代碼健壯性。

          public class MainTest {

             
          public static void useATypeReason(ISomeReason<ATypeReason> reason)
          {
              sysout(reason.getImplClassType().getIndex());
          }


             
          //ATypeReason的類型沒有指定泛型參數適用于掉這個接口
             public static void dontCareParamType(ISomeReason<?> reason)
             
          {
                sysout(reason.getImplClassType());
                
          //不能調用
                 sysout(reason.getImplClassType().getIndex());
             }


          }

          你可以把ISomeReason接口定義如下,更嚴格。

          public interface ISomeReason<extends Enum<E> & ISomeReason<E>> {

             
          public E type();

          }



          posted on 2010-06-29 14:08 北國狼人的BloG 閱讀(1131) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 文成县| 德保县| 友谊县| 兴城市| 孝感市| 东山县| 福清市| 榕江县| 南部县| 陕西省| 平乡县| 五台县| 夹江县| 札达县| 精河县| 鄂伦春自治旗| 东兰县| 郧西县| 临清市| 桐梓县| 抚州市| 读书| 惠安县| 大厂| 峨山| 芦溪县| 鄂伦春自治旗| 崇仁县| 佛山市| 安平县| 辽宁省| 广丰县| 金乡县| 思茅市| 阜康市| 嵩明县| 德州市| 友谊县| 普兰县| 崇仁县| 洛南县|