我有一个域类,如:
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/