![](/img/trans.png)
[英]Does a class which implements an interface's method (without explicitly implementing that interface) extend that specific interface?
[英]How to make a Groovy class looks as Map to Java code without implementing Map interface explicitly
我想實現一個自定義的類類,其中大部分功能都委托給嵌套的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) {
return inner.invokeMethod(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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.