在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

  • 2010-09-19
  • 本文字数:1562 字

    阅读完需:约 5 分钟

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 Struts Apache 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

2010-09-19 09:094791
用户头像

发布了 127 篇内容, 共 49.5 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

第三届电力电子与人工智能国际学术会议(PEAI 2026)

搞科研的小刘

人工智能 学术会议

第五届遥感与测绘国际学术会议(RSSM 2026)

搞科研的小刘

学术会议 遥感测绘

第二届人工智能与计算机网络技术国际学术会议(ICAICN 2026)

搞科研的小刘

学术会议 计算机网络技术

AI 诊断软件系统开发:从工程视角拆解一套可落地的技术架构

上海拔俗

知识图谱分析系统开发:从数据建模到图计算的工程化落地实践

上海拔俗

告别调包侠!2026年Go/Java程序员的AI架构师实战转型指南

王中阳Go

Go AI

国庆专属互动引流神器 —— 传递红旗小程序系统深度解析

微擎应用市场

基于Amazon Q Developer实现IoT设备的Amazon Timestream性能与成本优化

亚马逊云科技 (Amazon Web Services)

人工智能

烟草专卖执法案卷评查系统:案卷质量效率全域跃升

中烟创新

AI 标准化考核系统开发:如何用工程手段实现“可量化、可复核、可复用”的智能评估

上海拔俗

Data Agent 的隐形账单:为什么看起来“最重”的语义建模,反而是企业最省钱的选择?

Aloudata

数据分析 AIAgent ChatBI 智能问数 dataagent

区块链DApp开发和上线

北京木奇移动技术有限公司

dapp开发 区块链开发 软件外包公司

MonkeyCode:2025年企业级AI编程助手的终极解决方案——私有化部署+代码安全扫描+团队协作全搞定

百川云开发者

业务管理软件大模型开发:从“功能系统”到“智能系统”的工程化演进

上海拔俗

Apache Doris 4.0.2 版本正式发布

SelectDB

数据库 apache 社区 物化视图 #人工智能

AI 人工智能预警系统开发:从“规则告警”到“风险前置”的工程化实践

上海拔俗

AI 智能问答系统开发:从“对话能力”到“可靠知识服务”的工程实践

上海拔俗

2026生物神经网络与智能优化国际研讨会(BNNIO 2026)

搞科研的小刘

学术会议 生物神经网络

政策东风下的数字游民:孤独与协作难题,被“搭子文化”治愈了?

网易伏羲

人机协作 网易伏羲 数字游民 群体智能 灵活就业

AI 智能体的开发方法

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI应用开发

行业热议 | 当实时数据平台成为必然布局,IBM 收购 Confluent 释放了什么信号?

tapdata

kafka架构 数据集成 实时数据平台 IBM收购Confluent

第九届智能制造与自动化国际学术会议(IMA 2026)

搞科研的小刘

智能制造 学术会议

第三届信息化教育与计算机技术国际学术会议(IECA 2026)

搞科研的小刘

学术会议 计算机技术

恶意NuGet包仿冒Tracer.Fody,窃取加密货币钱包数据

qife122

网络安全 供应链攻击

XSKY IceLake 冰湖:开启 PB 级数据归档新时代

XSKY星辰天合

分布式存储,

以一场展会锚定全年三大核心目标:2026杭州国际人工智能展会

AIOTE智博会

智博会 人工智能博览会 人工智能展 杭州智博会

超融合基础架构揭秘:一篇文章读懂分布式存储与计算虚拟化

智驱前线

AI 心理辅导系统软件开发:在“情绪支持”与“工程安全”之间建立技术边界

上海拔俗

AI测试开发工程师面试全解析:20道技术核心题+答题思路框架

测试人

软件测试

超融合:为什么说它重新定义了数据中心?深度解析软件定义与统一管理

智驱前线

RFID智能收银系统选型指南:识别精度与通道设计避免结算踩坑

斯科信息

RFID收银系统 斯科

综述:字符串到Java对象转换的工具库_Java_Tim Cull_InfoQ精选文章