大きなgroovy/javaプロジェクトを継承していますが、うまく動作しないような使用パターンに悩まされていますが、なぜ。Javaスーパークラスのプロパティを参照するときにgroovyの 'super'キーワードを使用する
私の前身は、Javaスーパークラスをよく使用し、 多くのGroovyサブクラスを頻繁に使用します。サブクラスでは、彼は 遅延初期化を実行するゲッターを持っていて、次にプロパティを使用して の値をスーパークラスに設定します。残念ながら、これはNoSuchFieldErrorをスローするようです。
私は以下の小さなテストケースでこれを再現できました。 "super.property"としてプロパティを参照すると、 NoSuchFieldErrorがスローされますが、単に "プロパティ"として参照すると正常に動作します。
は、ここではいくつかのJavaベースクラスです:
public interface Content {
public String getValue();
}
public class HolderJava {
private Content _content;
public Content getContent() { return _content; }
public void setContent(Content value) { _content = value; }
}
そしてここでは、それらを拡張し、いくつかのGroovyクラスです:私はgroovyコンソールにコードを貼り付けるとき
class ContentGroovy implements Content {
def value
public String getValue() {
value
}
}
class HolderGroovy extends HolderJava {
public ContentGroovy getContent() {
ContentGroovy newContent = new ContentGroovy()
newContent.value = "snarf"
// doesn't work, throws NoSuchFieldError
//super.content = newContent
// works
content = newContent
newContent
}
public static void main(String[] args) {
println(new HolderGroovy().getContent().getValue())
}
}
groovyのユーザーメーリングリストによると、 "super"はプロパティに使用できません。私はこれがドキュメントで参照されているとは思えません。 – lucasmo