2009-07-13 17 views
4

たとえば、列挙型に2つの要素があります。最初のものは整数値0と文字列Aで表現されますが、2番目の文字は整数値2と文字列 "B"(1ではなく)で表現されます。これは可能ですか?Java enumに要素の「欠落している」整数値を持たせる方法はありますか?

現在、私の列挙型は、このように宣言されています。私はZEROとTWOの整数値を取得した場合

public enum Constants { 
    ZERO("Zero"); 
    TWO("Two"); 
} 

、私は現在、それぞれ、0と1になるだろう。しかし、私は0と2を得たいと思います。

答えて

14

私はあなたがEnumの序数をユーザ定義の値に戻す方法を指していると仮定します。この場合、いいえ。

特定の値を返す場合は、(たとえばgetValue()など)を実装して、それをEnumコンストラクタに渡します。例えば

public enum Constants { 
    ZERO("Zero",0), 
    TWO("Two",2); 

    final private String label; 
    final private int value; 

    Constants(String label, int value) { 
     this.label = label; 
     this.value= value; 
    } 

    public int getValue() { 
     return value; 
    } 

    public String getLabel() { 
     return label; 
    } 
} 
+0

ような何かを「この列挙定数(初期定数はゼロの序数が割り当てられ、その列挙宣言での位置)の順序を返します。」彼らは実際にnumberd 0 - 要素の数です。 – amischiefr

+0

しかし、ordinal()メソッドを使用せず、値をコンストラクタに渡すことで、ユーザーから真の序数値を隠して、必要なものを使用することができます。 –

+0

ラベルと値を最後にする必要があります。 –

4

あなたの列挙のために適切な名前の整数フィールドを定義し、あなたのベストどのような値のスーツにそれを初期化します。 enumの内部順序は意味を持つことを意味しません。

3

はこのような何かを試してみてください。

public enum MyEnum { 

A(1), B(2), C(3); 

int myOrdinal; 

private MyEnum(int myOrdinal) { 
    this.myOrdinal = myOrdinal; 
} 

public int getMyOrdinal() { 
    return myOrdinal; 
} 

あなたはそれを指定しない限り、(予期しない動作につながるのは違っそれを扱うことができる事項、さらには異なるJVMを、発注、列挙型の内部番号に依存している場合"enum jsr-161"では、それを読んでいない...)。

内部序数に依存する実装が見られました。これは、Webドロップダウンボックスでの並べ替えに使用されていました。誰かが親切、その後 文字列入力= ... int型inputAsInt = Constants.valueOf(入力を使用して、あなたは、コンストラクタに整数を渡したい

1

..列挙値「クリーンアップ」したらそれはおかしいバグを生産しました。 toUpperCase())。getValue();

のJavaDocから

public enum Constants{ 
ZERO(0), 
TWO(1); 
private final int value; 
public Numbers(int value){ 
    this.value = value; 
} 

public int getValue(){ 
    return this.value; 
} 
} 
関連する問題