我继承了一个大型的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() )
}
}
答案 0 :(得分:0)
似乎工作正常。 Java预编译或使用groovyc编译?