浏览 2303 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-26
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
类型强制
Tapestry 常常必需强制转换对象的类型。通过强制,我们能转换某些类型的对象为有相似内容的不同类型的新对象:一个常用的例子是强制转换一个string为integer或double。
尽管这些强制转换类型常发生在tapestry-core内(包括强制转换组件参数),这也发生在tapestry-ioc内,比如在一个构建器方法内注入一个值要优于注入一个服务。
在Tapestry内的相似内容,类型转换是可扩展的。根基是一个TypeCoercer服务。它的结构由许多CoercionTuples组成。每个元组(tuple)定义如何强制转换类型。强制的初始设置主要集中在不同的数字类型转换。
少数特殊的强制转换涉及到null;Object-->List 包裹一个独立对象作为一个单独的列表。随后我们需要null-->List来确保null抑制无效(null stays null),这优于一个单独的只有孤立的为null的元素列表。
Tapestry可以窜改必须的强制转换。例如,假定它必须强制转换一个StringBuffer为一个Integer;TypeCoercer将串联一系列的强制转换。
1. Object --> String
2. String --> Long
3. Long --> Integer
贡献新的强制
TypeCoercer是可扩展的,你可以添加你所希望的强制转换。例如,让我们假定你有一个Money类型描绘许多现金,并且你想要能够在BigDecimal和Money间转换。此外,让我们设想Money有一个接受一个BigDecimal参数的构造器。我们将使用少量的Tapestry IOC 配置告知TypeCoercer关于这个强制转换的信息。
此外,因为TypeCoercer知道如何强制转换Double到BigDecimal,或者由Integer到BigDecimal(到Long到Double),所有这些强制转换都能很好的工作。
当从null创建一个强制转换时,使用Void.cass作为源类型。例如,内建的强制转换从null到Boolean是这样实现的:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |