gpt4 book ai didi

java - 为什么 Groovy Enums 无法访问类变量?

转载 作者:搜寻专家 更新时间:2023-11-01 03:01:28 25 4
gpt4 key购买 nike

找不到任何文档来解释为什么不能从枚举中访问类变量。考虑这个例子:

package groovy;

public class Universe {

static String test = "test";

enum Planet {

EARTH {
@Override
void doSomething(){
System.out.print(test);
}
};

abstract void doSomething();
}

public static void main(String[] args) {
Universe.Planet.EARTH.doSomething(); // No such property: test for class: groovy.Universe$Planet$1
}
}

我知道这段代码也是完美的 Java 代码。虽然它使用 JRE 可以按预期工作,但不能使用 Groovy 的运行时环境,这让我更加好奇。有什么区别的证据吗?谢谢

最佳答案

Groovy 需要一些帮助来找到 Universe 的变量。这是一些 official documentation 的链接如果您想了解 Java 和 Groovy 之间的一些差异。这是一个 email discussion说到这一些。对于不熟悉枚举的人来说,它们是静态对象,因此无法访问实例对象或变量。这引出了我们的答案,静态变量需要以静态方式引用(通过类,而不是实例)。
此外,如果您尝试在 Groovy 1.7 之前使用内部类,您将会遇到麻烦(您不能)。

public class Universe {

static String test = "testing";

enum Planet {

EARTH {
@Override
void doSomething(){
System.out.print(Universe.test);
}
};

abstract void doSomething();
}

public static void main(String[] args) {
Universe.Planet.EARTH.doSomething(); // No such property: test for class: groovy.Universe$Planet$1
}
}

关于java - 为什么 Groovy Enums 无法访问类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com