精华帖 (2) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-29
最后修改:2009-11-30
class Bond{ private String id; private String name; public void setId(String id){ this.id = id; } public String getId(){ return this.id; } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } 然后我们来看看对应的FieldMap如何描述: FieldMap fm = new FieldMap("Bond").putField("id","060001").putField("name","06国债01"); 看起来FieldMap简洁许多,毕竟一个是静态定义一个是动态构建,一个强类型一个弱类型。 假设现在要为Bond这个类型加入发行价格和发行日期这两个属性,这时候定义JavaBean时我们将会陷入一个考量,定义什么类型,比如发行日期我们定义Date呢还是字符串?价格定义double呢还是字符串?对于拿日期来做计算或比较的,显然定义Date更合理,如果拿来是显示的显然某种格式的字符串更合适。无论你怎么定义在遇到不同场景时,必然要来回折腾转换,极为不便。 那FieldMap如何处理这样的问题呢? 假设某个Field是发行日期,它的name是iDate,像下面这样我们拿到的是什么? fieldMap.getField("iDate").getValue(); 答案是构造这个FieldMap时放的什么值就是什么值,比如有可能是yyyyMMdd格式的日期字符串,有可能是java的Date类型,如果你仅仅调用getValue(),那么你得到的是当初放的那个值,但是因为你知道这个Field叫iDate,里面的值一定是个日期,所以你有时候说我希望要拿Date,有时候希望要拿某种格式的字符串。因此你不仅仅可以调用Field的getValue(),你还可以这样: fieldMap.getField("iDate").getDateValue(); fieldMap.getField("iDate").getDateStringValue(); fieldMap.getField("iDate").getDateStringValue("yyyy/MM/dd"); 第一个你将直接拿到Date类型,第二个你将拿到yyyy-MM-dd格式的字符串,第三个你将拿到你自定义格式的日期字符串,比如这里就是yyyy/MM/dd。 很明显看到这里我们发现FieldMap灵活便利的多,因为即使对于同一个类型,它也有很多不同的形式。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-30
我比较疑惑,怎么没人发表一些看法?
|
|
返回顶楼 | |
发表时间:2009-11-30
请问FieldMap是指的那个
|
|
返回顶楼 | |
发表时间:2009-11-30
evanerv0079 写道 请问FieldMap是指的那个 FieldMap是我自己定义的一个数据结构,这里要讨论的核心是当我要描述一个事物的时候,是采用静态定义的Bean呢还是动态构建的FieldMap。FieldMap显然要灵活的多。 |
|
返回顶楼 | |
发表时间:2009-11-30
fieldMap.getField("iDate")
如果 iDate 是 MM/dd/yy 的格式字符串(02/03/09), 那fieldMap.getField("iDate").getDateStringValue("yyyy/MM/dd");会是怎样? |
|
返回顶楼 | |
发表时间:2009-11-30
icefire 写道 fieldMap.getField("iDate")
如果 iDate 是 MM/dd/yy 的格式字符串(02/03/09), 那fieldMap.getField("iDate").getDateStringValue("yyyy/MM/dd");会是怎样? LS提的问题很好,这说明什么呢?说明使用FieldMap的双方还是要隐含着某种约定的,但是宽松多了,一方以他便利的方式塞Date,另一方以他便利的方式拿某种Date字符串格式,但是如果两方便利的都是字符串,而且还出现LS讲的情况,那么两方就不能各自独善其身。 |
|
返回顶楼 | |
发表时间:2009-11-30
mock1234 写道 干脆什么field都规定只能是字符串!
干脆规定不允许多个field,任何对象只允许定义一个field存个xml值,然后再解析。 干脆别写软件,让小学生随便写写。我们都想伟大的事。至于是否会造成网络瘫痪、火车翻车、银行错账、心脏起搏器突然加快1000倍、所有程序都缓慢10万倍......无所谓,只要编程的人觉得有优势就成。 LS这段话我有些不解了,至于这么气急败坏吗? |
|
返回顶楼 | |
发表时间:2009-11-30
JavaBean也是可以动态构建的。Struts的动态Form就是动态构建的。使用的是Apache Commons的提供的工具类。
|
|
返回顶楼 | |
发表时间:2009-11-30
最后修改:2009-11-30
魔力猫咪 写道 JavaBean也是可以动态构建的。Struts的动态Form就是动态构建的。使用的是Apache Commons的提供的工具类。
但是还是有些差别,FieldMap中的Field定义了大量基本类型不同形式的便利方法。 除了上面的Date,还有比如对于数值类型的东西可以这样: fieldMap.getField("amount").getNumberStringValue(); fieldMap.getField("amount").getNumberStringValue(2); fieldMap.getField("amount").getDoubleValue(); fieldMap.getField("amount").getBigDecimalValue(); fieldMap.getField("amount").getIntValue(); |
|
返回顶楼 | |
发表时间:2009-11-30
事实上我并不否定强类型也有它的好处,但是如果一个软件和另一个软件通信,通信数据结构这样定义会灵活方便很多。
|
|
返回顶楼 | |