<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Atea - Hero's Grave

    面向對象,開源,框架,敏捷,云計算,NoSQL,商業智能,編程思想。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      40 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks
    JDK1.5引入的泛型,減少了類型強轉的代碼,增加了編譯檢查,提高了代碼的健壯性。
    但在某些情況,泛型檢查會出乎意料的“丟失”,由此可引發難以發現的bug。
     1 public class GenericDefectTest {
     2 
     3     public void test(final Map<String, String> map) {
     4         System.out.println(map.get("a"));// 這行可以正常執行
     5         System.out.println(map.get("b"));// 運行到這行才會報錯
     6         for (Map.Entry<String, String> entry : map.entrySet()) {
     7             System.out.println(entry.getValue());
     8         }
     9     }
    10 
    11     public static void main(final String args[]) throws Exception {
    12         GenericDefectTest genericTest = new GenericDefectTest();
    13 
    14         Map<String, Object> map = new HashMap<String, Object>();
    15         map.put("a""a");
    16         map.put("b"1);
    17         // new GenericTest().test(map);// 這里有編譯驗證,如果取消注釋會出錯。沒有問題
    18 
    19         // 但是如果用反射調用的話,就沒有驗證了,在實際使用這個值的時候才會報錯
    20         Method test = GenericDefectTest.class.getDeclaredMethod("test", Map.class);
    21         test.invoke(genericTest, map);
    22     }
    23 }
    我們期望程序執行到第三行就會報錯,但實際進行到第五行才會報錯。

    反編譯查看class
     1 public class GenericDefectTest
     2 {
     3   public void test(Map<String, String> map)
     4   {
     5     System.out.println((String)map.get("a"));
     6     System.out.println((String)map.get("b"));
     7     for (Map.Entry entry : map.entrySet())
     8       System.out.println((String)entry.getValue());
     9   }
    10 
    11   public static void main(String[] args) throws Exception
    12   {
    13     GenericDefectTest genericTest = new GenericDefectTest();
    14 
    15     Map map = new HashMap();
    16     map.put("a""a");
    17     map.put("b", Integer.valueOf(1));
    18 
    19     Method test = GenericDefectTest.class.getDeclaredMethod("test"new Class[] { Map.class });
    20     test.invoke(genericTest, new Object[] { map });
    21   }
    22 }
    可以看到泛型仍然存在于函數定義中。

    這可以說是一個Java泛型的"缺陷",實際使用中需要特別注意。
    posted on 2011-05-31 10:31 Atea 閱讀(696) 評論(0)  編輯  收藏 所屬分類: Java language
    主站蜘蛛池模板: 亚洲成AV人综合在线观看| 亚洲精品视频在线免费| 国产精品免费无遮挡无码永久视频 | 亚洲妇女熟BBW| 亚洲精品成人a在线观看| 99精品全国免费观看视频..| 亚洲精品美女久久久久| 国产精品jizz在线观看免费| 最近免费中文字幕中文高清| 亚洲欧洲自拍拍偷综合| 亚洲国产中文字幕在线观看| 99精品视频在线观看免费播放| 亚洲AV日韩AV永久无码色欲| 亚洲国产精品无码成人片久久| 成人免费无码大片a毛片软件| 国产va免费观看| 亚洲熟妇无码av另类vr影视| 亚洲桃色AV无码| 在线观看91精品国产不卡免费| 国产麻豆一精品一AV一免费| 亚洲国产精品嫩草影院| 91嫩草私人成人亚洲影院| 亚洲第一黄色网址| 丁香花在线观看免费观看| 日韩成人免费视频| 污视频网站免费观看| 色噜噜亚洲男人的天堂| 亚洲av最新在线网址| 亚洲成AⅤ人影院在线观看| 国产一精品一AV一免费孕妇| 久久国产免费观看精品| 污视频网站免费观看| 亚洲一级毛片免观看| 久久久亚洲欧洲日产国码农村| 亚洲不卡AV影片在线播放| 可以免费看黄的网站| 日韩精品久久久久久免费| 视频一区二区三区免费观看| 国产精品亚洲午夜一区二区三区 | 免费人妻无码不卡中文字幕18禁| 国产h肉在线视频免费观看|