如何使Groovy类看起来像Map to Java代码而不显式实现Map接口
发布时间:2020-12-14 16:26:08 所属栏目:大数据 来源:网络整理
导读:我想实现一个自定义的类类,其中大部分功能都委托给嵌套的Map委托实例.而且,我希望这个类看起来像一个Map到一个“真正的” Java类.因此我尝试执行以下操作: class ConfigurationMap implements Map { def inner = [:] def methodMissing(String methodName,m
我想实现一个自定义的类类,其中大部分功能都委托给嵌套的Map委托实例.而且,我希望这个类看起来像一个Map到一个“真正的”
Java类.因此我尝试执行以下操作:
class ConfigurationMap implements Map { def inner = [:] def methodMissing(String methodName,methodArgs) { return inner.invokeMethod(methodName,methodArgs) } // my methods here ... 当然,这不起作用:-(Groovy要求类实现Map接口方法,尽管在运行时它们将由missedMissing()处理.如果我删除implements子句: class ConfigurationMap { def inner = [:] def methodMissing(String methodName,methodArgs) } 它适用于Groovy(即实例的行为真的像Map一样),但我不能将它用作Java代码中的Map: ConfigurationMap cm = ConfigParser.parseConfig("foo.cfg"); assertEquals(0,cm.size()); // size() method is not defined :-( 并建议我如何保持我的课程简短(即不明确地实现Map)并仍然使该类看起来像Map到Java? 解决方法
我想如果你使用@Delegate注释,编译的字节码将从Java正常工作.
class ConfigurationMap implements Map { @Delegate Map inner = [:] def myMethod() { return true } } ConfigurationMap cm = new ConfigurationMap() cm.foo = "bar" assert "bar" == cm.foo assert true == cm.myMethod() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |