<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

    手冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产男女性潮高清免费网站| 精品国产污污免费网站入口| 日韩精品内射视频免费观看| 久久亚洲欧洲国产综合| 一级特黄色毛片免费看| 亚洲中文字幕视频国产| 一个人免费观看视频在线中文| jjzz亚洲亚洲女人| 免费高清在线影片一区| 亚洲人JIZZ日本人| 免费的全黄一级录像带| 亚洲国产成人久久综合一| 99久久综合精品免费| 亚洲国产中文在线视频| 嫩草影院在线免费观看| 国产亚洲一卡2卡3卡4卡新区 | 亚洲爆乳无码专区www| 日本牲交大片免费观看| 一区免费在线观看| 亚洲色欲久久久综合网东京热| 成全在线观看免费观看大全 | 亚洲中文字幕无码中文字| 成年人在线免费看视频| 看全免费的一级毛片| 久久久无码精品亚洲日韩软件 | 最近在线2018视频免费观看| 中文亚洲AV片不卡在线观看| 日韩电影免费在线观看中文字幕| 亚洲欧洲校园自拍都市| a级男女仿爱免费视频| 亚洲理论在线观看| 国产免费啪嗒啪嗒视频看看| 久久久久免费视频| 亚洲a视频在线观看| 亚洲成a人片在线播放| 亚欧免费无码aⅴ在线观看| 亚洲日本人成中文字幕| 亚洲精品无码专区久久同性男| 无码精品人妻一区二区三区免费看 | 亚洲AV无码精品色午夜果冻不卡 | 亚洲中文字幕无码中文|