J2EE社区

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

问大家一个多态的问题??

Posted on 2010-01-05 20:32 xcp 阅读(1563) 评论(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,什么多态特性啊,直接用的枚举来完成,我个人觉得在这个特定的需求里面挺有用得!!

谢谢!

只有注册用户登录后才能发表评论。


网站导航: