2016-11-14 11 views
2

私はJava Enumsにかなり新しいので、それぞれの値にそれぞれTrue/False値が関連付けられたEnumリストを実装しようとしています。私の列挙型リストは、基本的に次のようになります。独立した状態をJavaのenum値に設定する

public enum SomeEnum{ 
    A("A"), 
    B("B"), 
    C("C"), 
    D("D"); 
    private String name; 
    private SomeEnum(String name){ 
    this.name = name; 
    } 
} 

しかし、私は、それぞれの列挙値は、それに関連付けられた「TRUE」または「FALSE」を持っていると思います。これはJavaのenumでもっともらしいですか?または、列挙型を使用せずにアプローチする必要があります。最終的に私はsetter/getterメソッドを持って、それぞれのステータスを独立して取得したいと思っています。

ありがとうございました!

EDIT:混乱して申し訳ありませんが、私は何をしたいのかはっきりしていませんでした。私はDDS用のメッセージセットを作成しており、それぞれTRUEまたはFALSEのステータスメッセージのパネル用のメッセージセットを作成して変更することができます。私は、各変数の別々のインスタンスを作成する代わりに、何とかenumを使用してこれを行うことができると考えました。

+0

名前が同じ場合は、名前を指定する必要はありません列挙型の値のSomeEnum.A.name() –

答えて

3

短い答え:あなたのユースケースによって異なります。このようなものを持っていることは完全にもっともらしいです:

public enum SomeEnum{ 
    A(true), 
    B(false), 
    C(true), 
    D(false); 

    private boolean myBool; 

    private SomeEnum(boolean myBool){ 
     this.myBool = myBool; 
    } 

    public boolean geMyBool() { 
     return myBool; 
    } 
} 

(などAB)列挙値の名前のString表現は次のように使用されているので、しかし、あなたのフィールドの名前としてnameを使用しないでくださいJavaのenumの値はnameです。したがって、例えばSomeEnum.A.getName()は "A"と等しくなります。この機能はすべての列挙型に組み込まれています。

myBoolの値を設定すると、実行時の状態がソースコードにある値と矛盾するため、列挙型のユーザーが混乱することにも注意してください。

+0

あなたは答えをありがとう! しかし、列挙型を使用して各列挙型のブール値を上書きすることは可能ですか?私の理解から、true/false boolは列挙型リストに設定されたときに静的/最終的です。別々の列挙型にそれぞれ割り当てる外部変数を持つことは可能ですか? – KyleKW

+0

@ KyleKWこの列挙体で何をしたいのかを示す擬似コードを追加できますか? –

+0

私は自分の答えを修正しました。あなたのユースケースを分かち合うことができれば涼しいでしょう。 –

0
public enum SomeEnum{ 
    A("A", true), 
    B("B", false), 
    C("C", false), 
    D("D", true); 

    private String name; 
    private boolean isImportant; 

    private SomeEnum(String name, boolean isImportant){ 
     this.name = name; 
     this.isImportant = isImportant; 
    } 

}

+0

グレートアレックス。その重要なフラグの値はどうやって取得できますか?あなたはそれのためのゲッターメソッドを追加する必要があります。 –

0

あなただけの答えはイエスであり、やることは簡単であるコンストラクタに

public enum SomeEnum{ 
    A("A", true), 
    B("B", false), 
    C("C", true), 
    D("D", false); 

    private String name; 
    private boolean flag; 

    private SomeEnum(String name, boolean flag){ 
    this.name = name; 
    this.flag = flag; 
    } 
} 
0

を新しいのparamを追加し、ソリューションの近くにあります。列挙型は、すでにあなたのインスタンスの名前を表す文字列を返しname()というメソッドを持っているので、

public enum SomeEnum{ 
    A(true), 
    B(false), 
    C(true), 
    D(false); 
    private boolean flag; 
    private SomeEnum(boolean flag){ 
     this.flag = flag; 
    } 

    public boolean getFlag() { 
     return flag; 
    } 
} 

また、あなたは、名前の変数をする必要はありません。 Stringをそのまま使用したい場合は、メソッドtoString()をオーバーライドして、それを使用してenumインスタンス名と同じではない文字列を取得してください。

関連する問題