J2EE社區

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          問大家一個多態的問題??

          Posted on 2010-01-05 20:32 xcp 閱讀(1568) 評論(5)  編輯  收藏 所屬分類: JAVA
              最近做項目的時候遇到一個問題:

              例:public static AAA parse(String dest,String ... formatRegulars) throws NullPointerException,Exception {}
              
              要求:1、我要實現formatRegulars參數是固定的從一個配置文件,枚舉,或者任何地方來固定數據源, 也就是formatRegulars來源固定。
                          2、當我們在數據源(配置文件,枚舉等)里面又新增一個數據時,不用修改parse方法里面的代碼?
              
              這肯定要用到多態!
              求高手指點:public static AAA parse(String dest,?) throws NullPointerException,Exception {} 

              小弟在線等,謝謝!


          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
          mail: 聯系我


          Feedback

          # re: 問大家一個多態的問題??  回復  更多評論   

          2010-01-05 22:06 by xu
          定義如下:public static AAA parse(String dest,Object object) throws NullPointerException,Exception {}


          再定義幾個工廠類,處理此方法時可以為:
          public class XXXParseProperties {
          public static AAA parse(String dest,Object object) throws NullPointerException,Exception {
          if(object instanceof xxx) {
          //TODO
          }
          }
          }

          其他情況依據上面的類照著貓畫老虎應該就可以了。

          # re: 問大家一個多態的問題??  回復  更多評論   

          2010-01-06 01:24 by xcp
          @xu
          謝了!

          # re: 問大家一個多態的問題??  回復  更多評論   

          2010-01-06 01:29 by xcp
          @xu
          我想到一種好方法
          第一、
          public enum FormatRegulars2{
          aaa("newstep"),
          bbbb("xcp"),
          ccc(new Date(System.currentTimeMillis()).toString());

          private String DateFormatRegularsStr;
          public String getDateFormatRegularsStr() {
          return DateFormatRegularsStr;
          }

          FormatRegulars2(String DateFormatRegularsStr){
          this.DateFormatRegularsStr = DateFormatRegularsStr;
          }
          }

          第二、
          public static AAA parse(String dateStr,FormatRegulars2 fr) throws NullPointerException, Exception

          第三、方法內部調用的時候
          fr.getDateFormatRegularsStr();得到想要的動態值

          第四、使用的時候
          DateUtils2.parse("c:\a.txt",FormatRegulars2.aaa);

          # re: 問大家一個多態的問題??  回復  更多評論   

          2010-01-06 10:49 by Lancelot
          太搞笑了,你直接注入想要的formatRegulars不就得了。

          而且你那個程序也有問題,你應該直接面向接口編程,聲明一個Parser接口,再去實現相應的DateParserImpl、RegularParserImpl……

          而不是寫這么一堆東西,你這個根本就不是多態。

          # re: 問大家一個多態的問題??  回復  更多評論   

          2010-01-06 11:25 by xcp
          @Lancelot
          你直接注入想要的formatRegulars不就得了。
          最開始我沒想到這,這樣幫肯定是最好的!

          直接面向接口編程,聲明一個Parser接口,再去實現相應的DateParserImpl、RegularParserImpl……
          也和上面差不多!

          寫這么一堆東西,你這個根本就不是多態
          因為最后一想肯定沒必要這樣鋪張浪費,用工廠,IOC,什么多態特性啊,直接用的枚舉來完成,我個人覺得在這個特定的需求里面挺有用得??!

          謝謝!
          主站蜘蛛池模板: 连南| 临西县| 南通市| 衡山县| 阿拉善盟| 六盘水市| 沂南县| 彭山县| 临汾市| 微山县| 南投县| 柳河县| 舟山市| 嘉鱼县| 昂仁县| 黄平县| 云龙县| 宜宾市| 沙雅县| 麦盖提县| 贞丰县| 南漳县| 会昌县| 盐山县| 巩留县| 禹城市| 铁岭县| 莫力| 武山县| 浦县| 五大连池市| 浏阳市| 新昌县| 青川县| 涞源县| 沁水县| 太白县| 九龙城区| 石台县| 南城县| 肇庆市|