2017-10-11 19 views
0

ワイルドカードを使用してトピックを表現するので、このWEATHER.SUNNYのようなdota表記を使用してenumを持つ必要があります。列挙型は有効な識別子である必要があるため、これは不可能であることはわかっています。Java - ドット表記でenumを作成する

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

おかげでその作業罰金。私はこれをより複雑な構造にどのように適用するかについては本当にわかりません。次のようなものを想像してみてください:WEATHER.SUMMER.SUNNY.DRYHUMIDITY –

+0

暗黙の階層がありますか?どのオブジェクトにも、それぞれのカテゴリの1つがありますか? 1つのTopicクラスのフィールドとして異なる列挙型にする必要がありますか?セットを保存できますか?ソレアはあなたが何をしようとしているのかによって異なります。 – EvanM

+0

すみませんでした。実際には、ドットは階層的な順序を意味し、ツリー構造につながります。これを文字列で行うのは明らかに問題ではありませんでしたが、列挙型の場合でも、もっと複雑な構造をどうやって実現するのか本当に分かりません。 –

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; 
} 

次に、あなたはこのように使用します。このappraochため

WEATHER weather = WEATHER.SUNNY 
関連する問題