Vla*_*hev 4 groovy interface missingmethod
我想实现一个自定义的类类,其中大部分功能都委托给嵌套的Map委托实例.而且,我希望这个类看起来像一个Map到一个"真正的"Java类.因此我尝试执行以下操作:
class ConfigurationMap implements Map {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
// my methods here
...
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用:-(Groovy要求类实现Map接口方法,尽管在运行时它们将由missedMissing()处理.如果我删除implements子句:
class ConfigurationMap {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
Run Code Online (Sandbox Code Playgroud)
它适用于Groovy(即实例的行为类似于Map),但我不能将它用作Java代码中的Map:
ConfigurationMap cm = ConfigParser.parseConfig("foo.cfg");
assertEquals(0,cm.size()); // size() method is not defined :-(
Run Code Online (Sandbox Code Playgroud)
并建议我如何保持我的课程简短(即不明确地实现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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
932 次 |
| 最近记录: |