5
class Parent {
    final static String newLine = "*"
}
class Child extends Parent{
    List body = [3, 4, 5]
    String toString() {
        def str = new StringBuilder()
        body.each { str.append(it + newLine) }
        str
    }
}

def c = new Child()
println c

上記は、問題を説明するための簡単なサンプルです。Groovy pluginonを使用してコンパイルできませんでしたEclipsefinalまたはスーパークラスのフィールドのいずれかを削除staticすると、問題が解決します。しかし、なぜそうなのかはわかりません。

http://groovy.codehaus.org/Groovy+Beans このリンクでは、Groovy で使用されるプロパティとフィールドのルールについて言及しています。適用されるのは最後のもの、つまりメタクラスであるべきだと思います。残念ながら、私はまだ動作を理解できませんでした。

この動作は、Groovy のすべてのバージョンで一貫して再現されます。誰かが 1 つのバグを Groovy チームに報告するかもしれません。私はこれまでにこれをしたことがありません。経験豊富な人がそれを行うことができれば、より効率的です。

4

2 に答える 2

2

これはおそらくhttps://issues.apache.org/jira/browse/GROOVY-5776であり、見た目よりも修正が困難です。

于 2013-02-01T18:56:14.543 に答える
1

blackdrag がすでに指摘しているように、これはバグです。ただし、別の回避策は、protectedキーワードを追加することです。

protected final static String newLine = "*"
于 2013-12-09T14:14:18.920 に答える