無線&移動互聯網技術研發

          換位思考·····
          posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          關于泛型

          Posted on 2009-07-12 12:13 Gavin.lee 閱讀(234) 評論(0)  編輯  收藏 所屬分類: 類的設計

          import ?java.util.ArrayList;
          import ?java.util.List;

          class ?Fan? {
          ????
          private ?String?name;

          ????
          public ? void ?setName(String?name)? {
          ????????
          this .name? = ?name;
          ????}


          ????
          public ?String?getName()? {
          ????????
          return ?name;
          ????}

          }


          public ? class ?FanTest? {
          ????
          public ? static ? void ?main(String[]?args)? {
          ????????
          // ?/用泛型的效果--list的get方法取出來的對象不需要強制轉換
          ????????Fan?fan1? = ? new ?Fan();
          ????????fan1.setName(
          " fanTest1 " );
          ????????Fan?fan2?
          = ? new ?Fan();
          ????????fan2.setName(
          " fanTest2 " );

          ????????List
          < Fan > ?list? = ? new ?ArrayList();
          ????????list.add(fan1);
          ????????list.add(fan2);

          ????????System.out.println(list.get(
          0 ).getName());
          ????????System.out.println(list.get(
          1 ).getName());

          ????????
          // ?/不用泛型的效果--list的get方法取出來的對象需要強制轉換
          ????????List?no_list? = ? new ?ArrayList();
          ????????no_list.add(fan1);
          ????????no_list.add(fan2);

          ????????System.out.println(((Fan)?list.get(
          0 )).getName());
          ????????System.out.println(((Fan)?list.get(
          1 )).getName());

          ????}

          }

          首先給一個我在CSDN里查到的我們常用的例子,這個基本上天天都會用,但是從來沒仔細的考慮過中間的含義,慚愧。

          規則和限制
            1、泛型的類型參數只能是類類型(包括自定義類),不能是簡單類型。
            2、同一種泛型可以對應多個版本(因為參數類型是不確定的),不同版本的泛型類實例是不兼容的。
            3、泛型的類型參數可以有多個。
            4、泛型的參數類型可以使用extends語句,例如<T extends superclass>。習慣上稱為“有界類型”。
            5、泛型的參數類型還可以是通配符類型。例如Class<?> classType = Class.forName(java.lang.String);


          package ?com.Gavin.fanxing;

          public ? class ?GenDemo? {
          ????
          public ? static ? void ?main(String[]?args)? {
          ????????
          // ?定義泛型類Gen的一個Integer版本
          ????????Gen < Integer > ?intOb? = ? new ?Gen < Integer > ( 88 );
          ????????intOb.showTyep();
          ????????
          int ?i? = ?intOb.getOb();
          ????????System.out.println(
          " value=? " ? + ?i);
          ????????System.out.println(
          " ---------------------------------- " );
          ????????
          // ?定義泛型類Gen的一個String版本
          ????????Gen < String > ?strOb? = ? new ?Gen < String > ( " Hello?Gen! " );
          ????????strOb.showTyep();
          ????????String?s?
          = ?strOb.getOb();
          ????????System.out.println(
          " value=? " ? + ?s);
          ????}

          }


          class ?Gen < T > ? {
          ????
          private ?T?ob;? // ?定義泛型成員變量

          ????
          public ?Gen(T?ob)? {
          ????????
          this .ob? = ?ob;
          ????}


          ????
          public ?T?getOb()? {
          ????????
          return ?ob;
          ????}


          ????
          public ? void ?setOb(T?ob)? {
          ????????
          this .ob? = ?ob;
          ????}


          ????
          public ? void ?showTyep()? {
          ????????System.out.println(
          " T的實際類型是:? " ? + ?ob.getClass().getName());
          ????}

          }


          package ?com.Gavin.fanxing;

          class ?Gen2? {
          ????
          private ?Object?ob;? // ?定義一個通用類型成員

          ????
          public ?Gen2(Object?ob)? {
          ????????
          this .ob? = ?ob;
          ????}


          ????
          public ?Object?getOb()? {
          ????????
          return ?ob;
          ????}


          ????
          public ? void ?setOb(Object?ob)? {
          ????????
          this .ob? = ?ob;
          ????}


          ????
          public ? void ?showTyep()? {
          ????????System.out.println(
          " T的實際類型是:? " ? + ?ob.getClass().getName());
          ????}

          }


          public ? class ?NoGenDemo? {
          ????
          public ? static ? void ?main(String[]?args)? {
          ????????
          // ?定義類Gen2的一個Integer版本
          ????????Gen2?intOb? = ? new ?Gen2( new ?Integer( 88 ));
          ????????intOb.showTyep();
          ????????
          int ?i? = ?(Integer)?intOb.getOb();
          ????????System.out.println(
          " value=? " ? + ?i);
          ????????System.out.println(
          " ---------------------------------- " );
          ????????
          // ?定義類Gen2的一個String版本
          ????????Gen2?strOb? = ? new ?Gen2( " Hello?Gen! " );
          ????????strOb.showTyep();
          ????????String?s?
          = ?(String)?strOb.getOb();
          ????????System.out.println(
          " value=? " ? + ?s);
          ????}

          }


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


          網站導航:
           
          主站蜘蛛池模板: 大英县| 伽师县| 右玉县| 平邑县| 金寨县| 华宁县| 丰县| 雷州市| 新田县| 葵青区| 鄂伦春自治旗| 调兵山市| 沂源县| 福州市| 友谊县| 鹤山市| 太和县| 兴安盟| 手游| 佛坪县| 炎陵县| 阿城市| 明星| 吴旗县| 宜阳县| 城市| 什邡市| 交口县| 留坝县| 张北县| 竹溪县| 苍溪县| 延庆县| 牡丹江市| 兴文县| 陇川县| 盈江县| 萨嘎县| 乌兰县| 长阳| 景谷|