综述:字符串到Java对象转换的工具库(转)

原文:http://www.infoq.com/cn/news/2010/09/joda_convert

Joda Time fame的Stephen Colebourne 关于他之前发布的一个Java库Joda Convert 在他的blog上率先发起了一场小范围的争论
这个库可以通过annotation来进行基础对象和字符串之间的转换。为了解释清楚关于字符串转换的方方面面,下面是对字符串和对象间互相转换技术的一个综述,让我们从Joda Convert开始。

根据Colebourne先生的文章,Joda Convert宣称的目标是为了简单性而牺牲完整性。它允许Java类的作者指定任意名称的方法,实现从字符串到此类实例间的转换。比 如,Currency类可能有个静态方法叫做“fromISOCode(code)”,以及一个实例方法“getISOCode()”。如果为这两个方法 添加来自Joda Convert的annotation:@FromString和@ToString,使用Currency类的应用就可以通过类似这样的调用:“Foo bar = StringConvert.INSTANCE.convertFromString(Foo.class, str);”,来实现对象和字符串间的转换。这样的转换通常对那些必须解析来自HTTP GET数据的Web应用很有帮助。Colebourne先生的这篇blog的评论者们则提出了一些其他的可替代方案。

第一个可替代方案是Java中内嵌的java.beans.PropertyEditor。PropertyEditor使用JavaBeans技术来把字符串转换成属性值。虽然PropertyEditor一般常见于像IDE这样的可视化编辑器里面,但其实它也可以用在后台的处理上。比如Spring3.0之前的版本广 泛地使用了PropertyEditor来支持数据绑定和验证。不像Joda Convert,PropertyEditor可以用在很多方面,而不仅仅是把字符串转换成对象。比如,PropertyEditor有内建的对注册 PropertyChangeListener的支持。

J2EE在JSF中也有自己内建的转换技术。JSF中包含了用于普通类型比如BigDecimal、Float、DateTime等的转换器,也提供了一个接口用于自定义转换器实现。自定义实现只需要为getAsObject和getAsString方法提供代码。但是JSF转换器和JSF绑定得很紧,所以在JSF以外使用它们会很困难。还有一些其他第三方的替代方案实现了字符串转换技术。其中一个最近被用在Spring 3.0中。虽然Spring之前的版本使用PropertyEditor,但SpringSource选择在3.0里面实现自己的转换方法。根据SpringSource所说:

 

当我们开始改善Spring 3的数据绑定系统时,我们的目标是:
1. 提供一个无状态、强类型的类型转换SPI来取代JavaBean PropertyEditor
2. 提供一个统一的类型转换API,用在任何需要的地方,包括Spring的DataBinder和Expression Language
3. 可以通过Java注解元数据来驱动类型转换
4. 通过注册可感知的缺省设置,以及采用惯例优于配置的策略,来简化转换

SpringSource并不是唯一一家提供自己的类型转换器的开源组织。一些Apache项目也有他们自己的类型转换器,比如Apache Commons BeanUtils(用在Apache Digester),陷入停滞的Apache Commons Convert,甚至是Apache StrutsApache Camel

一些框架还被设计成不仅仅能把字符串转换成对象。比如,Dozer是一个可以把任意复杂的对象转换成其他任意复杂的对象。因为字符串就是对象,所以它可以处在Dozer转换的任意一方。

最后,在选择一种转换技术的时候,开发者需要记住的是,上面提到的任何一种技术都是针对自己的目标环境而优化的。比如,浏览器中发送到HTML表单以及接收 自HTML表单的字符串,就会和把同一个对象写成XML文档的字符串不太一样。此外,即使是在完全相同的目标环境,比如浏览器中,一些用户可能需要的是不 同的本地化字符串(比如日期“2010-31-01”或者“1/31/2010”)。最后但一样重要的是,不同的媒介会支持不同的字符串编码。比如,XML文档可以使用UTF-8、ISO-8859-1或者许多其他的编码,因为它可以在第一行中指定字符串编码。而从URL解析得到的字符串只能是ASCII编码。

查看英文原文:Roundup of String to Java Object Conversion Libraries

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值