簡體   English   中英

如何使Groovy類看起來像Map to Java代碼而不顯式實現Map接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM