2017-10-11 93 views
0

我需要使用像這樣的WEATHER.SUNNY這樣的dota符號枚舉枚舉,因爲它們表示使用通配符的主題。我知道這是不可能的,因爲枚舉需要是有效的標識符。Java - 用點符號創建枚舉

here有人建議覆蓋toString mehtod,但我真的不明白這是什麼意思。 但是,它仍然有可能這樣做嗎?

回答

2

你絕對可以做什麼@Stefan建議,但是這可能是一個很好的用例,用於連接場你的枚舉值:

public enum Topic { 
    SUNNY("WEATHER.SUNNY"), CLOUDY("WEATHER.CLOUD"), ... 

    String notation; 

    Topic(String notation) { 
     this.notation = notation; 
    } 

    public String getNotation() { return notation; } 
} 

然後你可以調用Topic.SUNNY.getNotation()

+0

感謝這個appraoch其工作的罰款。但我不確定如何將它應用於更復雜的結構。想象一下這樣的事情:WEATHER.SUMMER.SUNNY.DRYHUMIDITY –

+0

那裏有一個隱含的層次嗎?每個物體都會有這些類別中的每一個嗎?它們應該與一個Topic類的字段是不同的枚舉嗎?你可以存儲一個集? Sorta取決於你要做什麼? – EvanM

+0

對不起,我是不安全的。點實際上意味着層次順序,並將導致樹結構。用Strings做這件事顯然是沒有問題的,但是再次用枚舉,我真的不知道如何實現更復雜的結構。 –

0

示例代碼,顯示壓倒一切的toString的想法:

public class Test { 

enum Weather { Sunny, Cloudy; 

    @Override 
    public String toString() { 
     return "WEATHER." + super.toString().toUpperCase(); 
    } 

}; 

public static void main(String[] args) { 
    System.out.println(Weather.Sunny); 
} 
} 

輸出:WEATHER.SUNNY

0

定義具有大寫名稱的枚舉沒有問題。 這與Java命名約定不一致,但它起作用。

enum WEATHER { 
    SUNNY, CLOUDY; 
} 

然後你會使用這樣的:

WEATHER weather = WEATHER.SUNNY