隨筆-159  評(píng)論-114  文章-7  trackbacks-0

           傳統(tǒng)我們都是定一個(gè)類型,帶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);

            }



          }


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

          public interface ISomeReason<extends Enum<X>> {

             
          public X getImplClassType();

          }

          實(shí)現(xiàn)一個(gè)子類。這里看到繼承是傳入了接口泛型中的X參數(shù),參數(shù)就是實(shí)現(xiàn)類自己的類型。

          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
             }


          }

          你也可以直接實(shí)現(xiàn),不傳入X,那么在使用這個(gè)類型的實(shí)例去傳入某一個(gè)指定類型的方法參數(shù)時(shí),會(huì)提示錯(cuò)誤,不利于代碼健壯性。

          public class MainTest {

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


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


          }

          你可以把ISomeReason接口定義如下,更嚴(yán)格。

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

             
          public E type();

          }



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

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 郴州市| 石景山区| 潼南县| 大冶市| 博罗县| 哈巴河县| 彰武县| 龙泉市| 汶上县| 安徽省| 沾化县| 灯塔市| 香河县| 阳泉市| 黑山县| 石阡县| 祁阳县| 新巴尔虎右旗| 翁源县| 安国市| 神农架林区| 富裕县| 神木县| 宁武县| 璧山县| 曲阳县| 定远县| 新津县| 隆德县| 鄂托克旗| 璧山县| 镇原县| 墨江| 新闻| 吉林省| 法库县| 孝义市| 江华| 长丰县| 柏乡县| 昌平区|