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

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

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

    年過三十仍在路上

    平凡而不平庸,低調(diào)而不頹廢 兩耳不聞人聲,只有硬盤在歌唱

    常用鏈接

    統(tǒng)計

    印刷報價

    印刷設(shè)備

    友情鏈接

    最新評論

    實現(xiàn)不調(diào)用構(gòu)造方法創(chuàng)建對象

    如果一個類沒有參數(shù)為空的構(gòu)造方法時候,那么你直接調(diào)用newInstance方法試圖得到一個實例對象的時候是會拋出異常的。

    能不能有辦法繞過構(gòu)造方法來實例化一個對象呢?

    Objenesis 為其提供了在四個不同的jvm上的解決方案。

    首先我們看看四個不同的jvm平臺:
    •  Sun Hotspot VM, versions 1.3, 1.4, 1.5 and 1.6
    •  GCJ version 3.4.4 (tested on Windows/Cygwin)
    •  BEA JRockit versions 7.0 (1.3.1), 1.4.2 and 1.5
    •  Aonix PERC (no serialization support), tested on version 5.0.0667

    從運行平臺上得到幾個關(guān)鍵的參數(shù),如下:

    /** JVM version */
    protected static final String VM_VERSION = System.getProperty("java.runtime.version");

    /** JVM version */
    protected static final String VM_INFO = System.getProperty("java.vm.info");

    /** Vendor version */
    protected static final String VENDOR_VERSION = System.getProperty("java.vm.version");

    /** Vendor name */
    protected static final String VENDOR = System.getProperty("java.vm.vendor");

    /** JVM name */
    protected static final String JVM_NAME = System.getProperty("java.vm.name");

    然后根據(jù)得到的參數(shù)進行判斷:

    根據(jù)得到平臺提供的jvm版本和供應(yīng)商來選擇不同的實例化策略。
    說實話,這幾個平臺里面我還是對sun公司提供的相對熟悉一些,所以除了sun公司提供的jvm對于的實例策略我在這里就不介紹了,
    大家有興趣的話可以去項目主頁下載下來細細研究。

    現(xiàn)在我們僅僅關(guān)注sun公司的,并且版本大于1.3的。
    版本為1.3的jvm具體實例化策略這里不做討論了,有興趣的可以去看objenesis的實現(xiàn)。

    代碼如下:
    import sun.reflect.ReflectionFactory;
    public class SunReflectionFactoryInstantiator implements ObjectInstantiator {

    private final Constructor mungedConstructor;

    public SunReflectionFactoryInstantiator(Class type) {

    ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
    Constructor javaLangObjectConstructor;

    try {
    javaLangObjectConstructor = Object.class.getConstructor((Class[]) null);
    }
    catch(NoSuchMethodException e) {
    throw new Error("Cannot find constructor for java.lang.Object!");
    }
    mungedConstructor = reflectionFactory.newConstructorForSerialization(type,
    javaLangObjectConstructor);
    mungedConstructor.setAccessible(true);
    }

    public Object newInstance() {
    try {
    return mungedConstructor.newInstance((Object[]) null);
    }
    catch(Exception e) {
    throw new ObjenesisException(e);
    }
    }
    }

    通過sun.reflect.ReflectionFactory這個類來實例化一個class那么就繞過了其類的構(gòu)造方法,我們可以暫且稱之為繞道方式實例一個對象。
    希望上面的代碼能給大家起到一定的幫助,另外easymock的最新版本已經(jīng)使用了Objenesis來實例化一個Class獲取對象。

    項目主頁:http://objenesis.googlecode.com/svn/docs/index.html

    posted on 2009-08-20 08:53 和風賽跑 閱讀(1789) 評論(5)  編輯  收藏

    評論

    # re: 實現(xiàn)不調(diào)用構(gòu)造方法創(chuàng)建對象 2009-08-20 09:11 BoBo小說網(wǎng)

    值得參考下  回復  更多評論   

    # re: 實現(xiàn)不調(diào)用構(gòu)造方法創(chuàng)建對象 2009-08-20 09:12 BoBo小說網(wǎng)

    實際應(yīng)用中還是很多的  回復  更多評論   

    # re: 實現(xiàn)不調(diào)用構(gòu)造方法創(chuàng)建對象 2009-08-20 09:53 隔葉黃鶯

    對的,在 XStream 轉(zhuǎn)換 XML 或 JSON 到 JavaBean 時用得就是 sun.reflect.ReflectionFactory,所以不依賴于 JavaBean 的構(gòu)造函數(shù)。  回復  更多評論   

    # re: 實現(xiàn)不調(diào)用構(gòu)造方法創(chuàng)建對象 2009-08-21 17:46 個性藝術(shù)簽名

    實際應(yīng)用中還是很多的  回復  更多評論   

    # re: 實現(xiàn)不調(diào)用構(gòu)造方法創(chuàng)建對象 2009-08-25 08:50 找個美女做老婆

    Java樂園學習網(wǎng)站: http://www.javaly.cn

    有大量的學習文章和視頻教程,以及一些項目源碼

    Java樂園學習群: 81107233  回復  更多評論   


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 久久不见久久见免费影院www日本| 亚洲精品无码久久| 四虎国产精品成人免费久久| 永久免费看bbb| 粉色视频免费入口| 亚洲人成国产精品无码| av成人免费电影| 亚洲AV无码成人网站久久精品大| 嫩草在线视频www免费观看| 亚洲国产精品无码成人片久久| 国产精品福利在线观看免费不卡| 激情97综合亚洲色婷婷五| 免费国产叼嘿视频大全网站| 久久亚洲春色中文字幕久久久| xxxx日本免费| 亚洲AV无码国产一区二区三区| 国产一级淫片视频免费看| 一级做a爰片久久毛片免费看| 国产亚洲美日韩AV中文字幕无码成人| 一级毛片高清免费播放| 亚洲色欲久久久综合网| 中文字幕天天躁日日躁狠狠躁免费| 国产成+人+综合+亚洲专| 免费无码又爽又刺激高潮| 一级毛片免费视频网站| 亚洲国产精品国自产电影| 九九九精品成人免费视频| 日韩a毛片免费观看| 久久精品国产亚洲夜色AV网站| 在线v片免费观看视频| 男女啪啪免费体验区| 自怕偷自怕亚洲精品| 在线免费观看国产视频| 国产日韩AV免费无码一区二区| 亚洲大片免费观看| 亚洲?V乱码久久精品蜜桃| 一级毛片全部免费播放| 久久精品国产亚洲AV电影网| 亚洲AV无码第一区二区三区 | 处破女第一次亚洲18分钟| 亚洲婷婷五月综合狠狠爱|