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

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

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

    潛魚在淵

    Concentrating on Architectures.

    posts - 77, comments - 309, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    代碼檢查(1)

    Posted on 2008-10-25 00:32 非魚 閱讀(2287) 評論(2)  編輯  收藏 所屬分類: Java技術
    這個系列,結合IDEA的Inspection和我自己的理解編寫。

    抽象問題

    1. 把實例造型(cast)成具體的類型

    這個問題的含義是,當得到一個實例時,把它cast到一個更加具體的類型使用。這個問題存在于以下場景:
    • 出于個人原因,比如只熟悉這個具體的類型、不動腦筋的編碼。
    這是新手常見的問題。比如可能程序員只熟悉ArrayList,并不知道其上的更加抽象的接口;或者個人感覺ArrayList更加“好用”。這是不應該出現的問題,有經驗的程序員應該指導初學者,避免犯錯。
    • 需要的方法不在更抽象的類型中,只在具體類型中才有定義。
    這個問題更多的表示了設計層面考慮的不充分。比如組織本身的代碼(非外來代碼),接口定義的類型不能滿足接口實現者的具體需求;返回值的類型過于泛化;本地變量(Local variable)定義的類型過于泛化等等。這些問題一般意味著在設計上考慮不周,導致了對象交互過程中的“對接不順利”,這是設計上的不一致,需要對設計進行仔細評估。以下是幾個這樣的例子:

    public Collection aMethod(Collection c) {
      List list = (List)c;
      Object o = list.get(0); // Collection中沒有get方法。導致實現者必須cast。
      ...
    }

    public void test() {
      // 返回值必須cast才能使用更加具體的方法。
      List alist = (List)aMethod(Arrays.asList(new String[]{"1", "2"}));
      Object obj = alist.get(0);
      ...
    }

    public someMethod() {
      MyInterface mi = new MyImplementation();
      ...
      // 大部分時間調用MyInterface中的方法,但忽然發現有某個地方需要調用特定的非接口實現:
      int count = ((MyImplementation)mi).specialMethod();
      ...
    }

    最后這個例子,可能是方法的實現本身的問題,比如完全可以直接使用MyImplementation來定義變量mi;也可能是抽象問題,即沒有把本來具有普遍性的方法放到接口中,而是放到了具體實現中。
    • 受環境約束,必須安全的使用造型。
    上面談到的設計問題,是指的組織內部的設計。在很多時候,需要使用外部的接口和實現,這些接口因為考慮了更加廣泛的使用環境而采用了更加泛化的接口。這就需要順應已經存在的設計來實現,不得不使用cast。但同時也要注意,在不得不cast的時候,一定要安全的使用cast,比如安全檢查或者安全的類型轉換,下面是示例:

    public boolean equals(Object o) {
      if (o == null) return false;
      if (o instanceof MyClass) { // 安全檢查!
        MyClass mc = (MyClass)o;
        // 調用MyClass中的特定方法。
        ...
    }

    public method() {
      Collection c = aMethodReturnsCollection();
      List list = new ArrayList(c); //安全的類型轉換,把Collection轉換成List。
      ...
    }


    , , ,


    評論

    # re: 編碼問題(1)[未登錄]  回復  更多評論   

    2008-10-27 13:37 by xxx
    inspection

    # re: 編碼問題(1)  回復  更多評論   

    2008-10-27 19:04 by 非魚
    @xxx
    Thanks, corrected.
    主站蜘蛛池模板: 亚洲国产成人一区二区精品区 | 岛国大片免费在线观看| 亚洲人成电影亚洲人成9999网| 一区二区三区免费精品视频| mm1313亚洲国产精品美女| 国产av无码专区亚洲av毛片搜| 四虎永久免费地址在线观看| 精品亚洲福利一区二区| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲欧美国产国产一区二区三区 | 久久免费国产视频| 亚洲综合在线观看视频| 精品无码国产污污污免费网站 | 日本免费网站视频www区| 亚洲在成人网在线看| 日韩免费a级毛片无码a∨| 亚洲欧美日韩中文无线码| 吃奶摸下高潮60分钟免费视频| 日韩在线视频免费| 久久精品国产亚洲AV果冻传媒| 6080午夜一级毛片免费看6080夜福利| 亚洲第一香蕉视频| 日本黄色免费观看| 毛片基地看看成人免费| 亚洲网站在线播放| 无码国模国产在线观看免费| 精品多毛少妇人妻AV免费久久| 亚洲第一极品精品无码久久| 91免费国产自产地址入| 亚洲av无码有乱码在线观看| 久久亚洲欧洲国产综合| 在线成人爽a毛片免费软件| 亚洲色大网站WWW永久网站| 亚洲人成网站18禁止一区| 四虎影视在线影院在线观看免费视频| 精品久久亚洲中文无码| 亚洲国产精品激情在线观看 | 亚洲国产精品无码中文lv| 国产gv天堂亚洲国产gv刚刚碰 | 高清一区二区三区免费视频 | 一区二区三区在线免费|