在引用java超类的属性时使用groovy'super'关键字

时间:2011-12-27 20:37:00

标签: java groovy

我继承了一个大型的groovy / java项目,我磕磕绊绊似乎不起作用的使用模式,但我无法弄清楚原因。

我的前任经常使用java超类和 许多groovy子类。在子类中,他有执行a的getter 懒惰初始化然后,通过使用属性,设置一个值 超级班。不幸的是,这似乎引发了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类:

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() )
     }
}

1 个答案:

答案 0 :(得分:0)

当我将代码粘贴到GroovyConsole中时,

似乎工作正常。 Java预编译或使用groovyc编译?