Groovy闭包不适用于超类的静态final字段

时间:2013-01-27 22:16:55

标签: groovy static closures final

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 plugin上的Eclipse进行编译。删除超类字段中的finalstatic解决问题。但是,我不知道为什么会这样。

http://groovy.codehaus.org/Groovy+Beans 在此链接中,它提到了Groovy中使用的属性和字段的规则。我认为应用的应该是最后一个,即元类。不幸的是,我仍然无法理解这种行为。

在所有版本的Groovy中都会一致地重现该行为。也许有人可以向Groovy团队报告一个错误。我以前从未这样做过。如果有经验的人可以做到这一点会更有效率。

2 个答案:

答案 0 :(得分:2)

这很可能是http://jira.codehaus.org/browse/GROOVY-5776,它比看起来更难以修复

答案 1 :(得分:1)

正如blackdrag已经指出的那样:这是一个错误。 但另一种解决方法是添加protected关键字:

protected final static String newLine = "*"