Groovy中静态和最终修饰符的使用

Groovy中静态和最终修饰符的使用,groovy,static,final,Groovy,Static,Final,Groovy V.1.6.3中上述代码段的输出为 测试字符串是Test Groovy V.1.8.6中上述代码段的输出为 测试字符串为空 如果我将声明修改为static(private static string TEST=“TEST”)或final(private final string TEST=“TEST”),但不是两者都有,那么上面的代码段将成功打印字符串。我的理论是,由于对象是静态和私有的,所以您没有访问权,因为它是一个单独的对象。但是,如果它只是私有的,那么您的方法是对象的一部分,

Groovy V.1.6.3中上述代码段的输出为

测试字符串是Test

Groovy V.1.8.6中上述代码段的输出为

测试字符串为空


如果我将声明修改为static(
private static string TEST=“TEST”
)或final(
private final string TEST=“TEST”
),但不是两者都有,那么上面的代码段将成功打印字符串。

我的理论是,由于对象是静态和私有的,所以您没有访问权,因为它是一个单独的对象。但是,如果它只是私有的,那么您的方法是对象的一部分,并且它可以访问它。如果它只是静态的,那么您就可以访问该字段-默认情况下该字段是公共的。

当我们在运行时类路径中使用Groovy++时,从其他可传递的依赖项中发现了这种情况。如果是这样的话,你可以看看。

我觉得它像个bug。你在邮件列表上问过吗?你是怎么运行的
newgroovyhello().execute()
prints
Test String is Test
对于我来说,使用Groovy 1.8.6在IDE中运行它,使用相同的语法new GroovyHello().execute();但是我的输出是“teststringisnull”,哪个版本的IDE?这是个秘密吗?有人能告诉我为什么会这样吗?
class GroovyHello {
    public String execute() {
             println("Test String is " + TEST)
    }

private static final String TEST = "Test"
}