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

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

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

    WEB開發(fā) de 點(diǎn)滴

    by sanwish

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      38 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks

    何為具備clone條件的并且有必要clone的成員進(jìn)行逐一clone?比如,原生類型(primitive type),定為瞬態(tài)(Transient)的類型,不可訪問的類型(!Field#isAccessible()),沒實現(xiàn)Cloneable接口的類型等等,都不具備clone條件。String等java定義的類型就不需要再深入clone了,這些屬于沒必要進(jìn)行clone的情況。但List類型等 “容器”類是有必要clone的成員類型。

    據(jù)此,遞歸程序示意如下(deepClone為java 方法):

    /**

    * @return Object 返回clone的對象

    * @param obj 原對象

    * @param length clone的深度

    */

    public Object deepClone(Object obj, int length) {

    Object result = obj;

    //此處為偽代碼: 如果對象obj不具備clone條件,就返回result,這也是遞歸的結(jié)束條件。

    //此處為偽代碼: 如果對象obj沒必要clone,就返回result

    //此處為偽代碼:開始進(jìn)行“clone”對象。這地方是調(diào)一個抽象方法來處理,這樣可以增加很多靈活性。該方法主要目的是實現(xiàn)“clone”對象方案。注意:這里面的“clone”方案可能是我們想都想不到的方案,它可能有很多創(chuàng)意,但效果都是一樣的,就是要“clone”個新的對象出來。當(dāng)然最容易想的就是Object#clone()方法了。示意如下:

    result = om.clone(obj);

    //此處為偽代碼: 獲取具備clone條件的并且有必要clone的所有成員。這地方也是調(diào)一個抽象方法來處理。同樣是為了增強(qiáng)靈活性。獲取這些成員的方法有很多,可能是通過setter和getter對來得到,也可能是通過get fields 等等方法得到(這種方法可能不少成員是無法直接訪問的,往往需要結(jié)合別的方法),甚至是多種方法的綜合。總之,目的只有一個,就是獲得這些成員。

    for (int i = 0; i < fields.length; i++) {

    //對成員進(jìn)行處理

    //如果已不需要再判斷成員了,那除了“容器”成員外,已經(jīng)clone結(jié)束

    if (length <= 1) {

    if (!“容器”成員) {

    continue;

    }

    try {

    //只需clone一次了,注意遞歸方法的深度參數(shù)傳入1

    clonedFieldValue = deepClone(“容器”成員的值, 1);

    } catch (Exception ex2) {

    ex2.printStackTrace();

    return result;

    }

    } else {

    try {

    clonedFieldValue = deepClone(成員的值, length - 1);

    } catch (Exception ex) {

    ex.printStackTrace();

    return result;

    }

    }

    try {

    //此處為偽代碼:將clone好的值(clonedFieldValue)設(shè)進(jìn)去

    } catch (Exception ex) {

    ex.printStackTrace();

    return result;

    }

    }//for..

    return result;

    }

    至此,已完成了“N深clone”。下面討論一下別的相關(guān)問題。比如說這種深度clone原本是 A-->B-->C--……-->xz這樣一種情況,就是說A類含有B成員,B里面又含有C成員,依此類推。如果想在“N深 clone”時,只clone“xz”這個成員怎么辦?其實很簡單,這個問題主要是要解決在遞歸過程中有些成員需要clone同時有些成員不需clone 仍保留引用這個問題。在上面的遞歸示例中已經(jīng)提到,實現(xiàn)“clone”的“方案”已經(jīng)被定義成抽象方法,那么我們只要對這個方法做一個滿足這個需求的實現(xiàn)即可。

    posted on 2008-11-07 11:07 sanwish 閱讀(131) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 女性无套免费网站在线看| av网站免费线看| 色播精品免费小视频| 亚洲a在线视频视频| 无码人妻久久一区二区三区免费| 国产亚洲AV夜间福利香蕉149| fc2成年免费共享视频网站| 亚洲AV无码一区二区三区国产| 色吊丝免费观看网站| 亚洲va中文字幕无码| XXX2高清在线观看免费视频| 色噜噜亚洲精品中文字幕| 97人妻精品全国免费视频 | 久久精品国产亚洲AV电影网| 国内自产少妇自拍区免费| 亚洲heyzo专区无码综合| 成人爱做日本视频免费| 成人免费视频一区二区| 中文字幕精品亚洲无线码一区应用| 国精产品一区一区三区免费视频| 色拍自拍亚洲综合图区| 日韩精品无码区免费专区 | 国产成人A在线观看视频免费| 亚洲13又紧又嫩又水多| 日本免费一区二区三区最新vr| 麻豆一区二区三区蜜桃免费| 亚洲开心婷婷中文字幕| 99视频有精品视频免费观看| 亚洲人成免费网站| 又粗又硬又大又爽免费视频播放| a级毛片免费网站| 中文字幕亚洲色图| 免费精品一区二区三区在线观看| 国产男女爽爽爽免费视频| 亚洲自偷自偷精品| 国产精品色午夜免费视频| 好男人资源在线WWW免费| 亚洲人成网站18禁止久久影院 | 成人黄软件网18免费下载成人黄18免费视频 | 一二三四在线播放免费观看中文版视频| 老子影院午夜伦不卡亚洲|