我有一个域类:
class MyDomainClass{
String name
}
带有签名的界面:
BigDecimal doBigThangs(MyDomainClass startHere)
我希望能够像这样称呼它
doBigThangs('stuff')
让它自动将字符串'stuff'强制插入适当的MyDomainClass。这是我尝试过的,但也许我需要使用“asType”或其他东西。
ExpandoMetaClass.enableGlobally()
String.metaClass.toMyDomainClass = {->MyDomainClass.findByNameLike(delegate)}
答案 0 :(得分:1)
您是对的:您可以通过覆盖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)