搜寻有关Groovy的“将aString
转换为” a的方法Date
,我遇到了这篇文章:http :
//www.goodercode.com/wp/intercept-method-calls-groovy-type-conversion/
作者使用Groovy metaMethods来允许动态扩展任何类的asType
方法的行为。这是网站上的代码。
class Convert {
private from
private to
private Convert(clazz) { from = clazz }
static def from(clazz) {
new Convert(clazz)
}
def to(clazz) {
to = clazz
return this
}
def using(closure) {
def originalAsType = from.metaClass.getMetaMethod('asType', [] as Class[])
from.metaClass.asType = { Class clazz ->
if( clazz == to ) {
closure.setProperty('value', delegate)
closure(delegate)
} else {
originalAsType.doMethodInvoke(delegate, clazz)
}
}
}
}
它们提供了一个Convert
包装Groovy复杂性的类,使得添加as
从任何类型到任何其他类型的基于定制的类型转换变得很简单:
Convert.from( String ).to( Date ).using { new java.text.SimpleDateFormat('MM-dd-yyyy').parse(value) }
def christmas = '12-25-2010' as Date
这是一种方便且功能强大的解决方案,但对于不熟悉metaClasses的权衡和陷阱的人,我不会推荐它。