[英]Why Groovy Enums has no access to class variables?
找不到任何解釋為什么無法從枚舉中訪問類變量的文檔。 考慮這個例子:
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的變量。 如果您想了解Java和Groovy之間的一些差異,這里是一些官方文檔的鏈接。 這是一個涉及這個問題的電子郵件討論 。 對於不熟悉枚舉的人來說,它們是靜態對象,因此不能訪問實例對象或變量。 這引出了我們的答案,靜態變量需要以靜態方式引用(通過類,而不是實例)。
此外,如果你嘗試在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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.