簡體   English   中英

為什么Groovy Enums無法訪問類變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM