搜寻有关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的权衡和陷阱的人,我不会推荐它。