我有一个域类,如:

class MyDomainClass{
  String name
}

以及带有签名的接口(interface),例如:
BigDecimal doBigThangs(MyDomainClass startHere)

我希望能够这样称呼它
doBigThangs('stuff')

并自动将字符串“stuff”强制转换为适当的MyDomainClass。这是我尝试过的方法,但是也许我需要使用“asType”之类的东西。
ExpandoMetaClass.enableGlobally()
String.metaClass.toMyDomainClass = {->MyDomainClass.findByNameLike(delegate)}

最佳答案

没错:您可以通过覆盖asType添加类型转换。您的示例如下所示:

oldAsType = String.metaClass.getMetaMethod("asType", [Class] as Class[])
String.metaClass.asType = { Class c ->
    if (c == MyDomainClass) {
        MyDomainClass.findByNameLike(delegate)
    } else {
        oldAsType.invoke(delegate, c)
    }
}

但是,groovy不会在方法调用中将String静默转换为其他类型。您必须像这样调用您的方法:
doBigThangs('stuff' as MyDomainClass)

关于data-binding - Grails自动将字符串强制转换为我的域类之一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9184118/

10-11 20:25