隨筆-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 閱讀(1136) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 台山市| 龙泉市| 清水县| 仪陇县| 丹凤县| 五大连池市| 叶城县| 瑞安市| 龙海市| 德安县| 苏州市| 崇义县| 黄山市| 宁德市| 鄂托克前旗| 乐东| 镇坪县| 和平区| 墨脱县| 吴堡县| 南召县| 龙门县| 鄂伦春自治旗| 沭阳县| 三门峡市| 阜阳市| 舟曲县| 连州市| 石城县| 固原市| 新民市| 南昌县| 博湖县| 清流县| 合作市| 阿克| 东光县| 郓城县| 广东省| 习水县| 馆陶县|