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

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

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

    JUST DO IT ~

    我只想當個程序員

    一個 Generic問題

    一個 Generic問題?
    來自 http://blog.csdn.net/zhangxiaoxiang/archive/2006/11/07/1372076.aspx?Pending=true

    下面程序的main方法中的第二行代碼和注釋中的兩行代碼表達的意思完全相同,注釋中的兩行代碼不能通過編譯(這很容易理解),而第二行(采用方法調用鏈)卻可以順利通過編譯(這就很難理解了)。

    public ? class ?Test
    {
    ????
    public ? void ?func()
    ????
    {
    ?????????System.out.println(
    " func " );
    ???}

    ?
    ???
    public ? static ? void ?main(String?args[])? throws ?Exception
    ???
    {
    ???????????Object?obj?
    = ? new ?Test();

    ???????????
    // 下面這行可以成功編譯??
    ???????????((Test)obj).getClass().newInstance().func();

    ???????????
    // 下面這兩行無法通過編譯
    ??????????? /* Class?c?=?((Test)obj).getClass();
    ???????????c.newInstance().func();?
    */

    ???
    ?}

    }
    ?


    我把這段程序調試了一下


    public?class?Test
    {
    ????
    public?void?func()
    ????
    {
    ?????????System.out.println(
    "func");
    ???}

    ?
    ???
    public?static?void?main(String?args[])?throws?Exception
    ???
    {
    ???????????Object?obj?
    =?new?Test();

    ???????????
    //下面這行可以成功編譯??
    ???????????((Test)obj).getClass().newInstance().func();

    ???????????
    //下面這兩行無法通過編譯
    ???????????
    ???????????
    ???????????
    //下面這兩行無法通過編譯
    ???????????/*Class?c?=?((Test)obj).getClass();
    ???????????c.newInstance().func();?
    */


    ???????????
    ?????????Class?
    <???extends?Test>?c?=?((Test)obj).getClass();
    ?????????
    //因為Generic,?編譯器可以在編譯期獲得類型信息所以可以編譯這類代碼。你將下面那兩行改成?

    ???????????c.newInstance().func();?
    ???
    ?}

    }
    ?







    下面的代碼
    ?? Object obj = new Test();

    ???? //下面這行可以成功編譯??
    ??? ((Test)obj).getClass().newInstance().func();


    javap之后

    public static void main(java.lang.String[])?? throws java.lang.Exception;
    ? Code:
    ?? 0:?? new???? #5; //class Test
    ?? 3:?? dup
    ?? 4:?? invokespecial?? #6; //Method "<init>":()V
    ?? 7:?? astore_1
    ?? 8:?? aload_1
    ?? 9:?? checkcast?????? #5; //class Test
    ?? 12:? invokevirtual?? #7; //Method java/lang/Object.getClass:()Ljava/lang/Class;
    ?? 15:? invokevirtual?? #8; //Method java/lang/Class.newInstance:()Ljava/lang/Object;
    ?? 18:? checkcast?????? #5; //class Test
    ?? 21:? invokevirtual?? #9; //Method func:()V
    ?? 24:? return

    }
    ???

    ??? ((Test)c.newInstance()).func();


    ?? 52:? invokevirtual?? #16; //Method java/lang/Class.newInstance:()Ljava/lang/Object;
    ?? 55:? checkcast?????? #5; //class Test



    virtualf?發表于2006-11-08 14:19:00??IP: 222.209.220.*

    這是編譯器行為.

    ((Test)obj).getClass().newInstance().func();

    <=>

    ((Test)(obj.getClass().newInstance())).func();


    可以反編譯后查看.

    //的確如此。




    ???? Object obj = new Test();
    ???? Class < ? extends Test> c = ((Test)obj).getClass();
    ?????? c.newInstance().func();

    ??
    ??
    ?? 9:?? checkcast?????? #5; //class Test
    ?? 12:? invokevirtual?? #7; //Method java/lang/Object.getClass:()Ljava/lang/Class;
    ?? 15:? astore_2
    ?? 16:? aload_2
    ?? 17:? invokevirtual?? #8; //Method java/lang/Class.newInstance:()Ljava/lang/Object;
    ?? 20:? checkcast?????? #5; //class Test
    ?? 23:? invokevirtual?? #9; //Method func:()V
    ?? 26:? return

    }

    ? Class < ? extends Test> c = ((Test)obj).getClass();
    ? System.out.println();?
    ? Test? ff=? c.newInstance();//.func();

    就無需轉換?.直接拿到對象了.

    ?

    getClass

    public final Class<? extends Object> getClass()






    當系統認為 class 變量 < 來自那個類的class >
    通過 class 變量.newInstance; 被賦予了 那個類的類型.

    posted on 2006-11-08 16:16 小高 閱讀(267) 評論(0)  編輯  收藏 所屬分類: java基礎

    導航

    <2006年11月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統計

    常用鏈接

    留言簿(3)

    隨筆分類(352)

    收藏夾(19)

    關注的blog

    手冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产成人亚洲综合网站不卡| 久久亚洲一区二区| 亚洲欧美日韩一区二区三区| 免费国产作爱视频网站| 亚洲美女免费视频| 欧洲乱码伦视频免费| 亚洲av无码电影网| 四虎影视免费在线| 精品在线观看免费| 久久精品亚洲男人的天堂| a国产成人免费视频| 中文字幕人成人乱码亚洲电影| sss在线观看免费高清| 亚洲精品中文字幕乱码三区| 永久免费AV无码网站国产| 久久综合亚洲色一区二区三区 | 黄床大片免费30分钟国产精品| 亚洲乱码中文字幕综合234| 欧亚一级毛片免费看| 亚洲精品国产字幕久久不卡| 国产一区二区免费| 亚洲欧洲日本国产| 国产伦一区二区三区免费 | 亚洲AV无码久久寂寞少妇| 一区二区三区四区免费视频 | 成人浮力影院免费看| 亚洲熟妇无码AV不卡在线播放| 免费国产一级特黄久久| 人妻免费一区二区三区最新| 亚洲国产精品成人精品小说 | 性xxxx视频免费播放直播| 亚洲1234区乱码| 亚洲第一页日韩专区| 久久国产精品成人免费| 亚洲香蕉久久一区二区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲日韩国产成网在线观看| 免费人妻无码不卡中文字幕系 | 中文字幕无线码中文字幕免费| 亚洲理论片在线中文字幕| 无码国模国产在线观看免费|