重複の可能性:
Javaのインデックスから列挙値を取得する方法は?
私は次のような列挙型を持っています:
public enum EnumTest {
ONE, TWO, THREE
}
1 = ONE 2 = TWO 3=THREEのような整数をどのように持っているか
今、私は2のような整数を取得し、それからEnumTestを生成したいのですが、これ を行うには2を返す必要がありますか?
重複の可能性:
Javaのインデックスから列挙値を取得する方法は?
私は次のような列挙型を持っています:
public enum EnumTest {
ONE, TWO, THREE
}
1 = ONE 2 = TWO 3=THREEのような整数をどのように持っているか
今、私は2のような整数を取得し、それからEnumTestを生成したいのですが、これ を行うには2を返す必要がありますか?
または、柔軟性を高めるために:
public enum EnumTest {
ONE(1), TWO(2), THREE(3);
private int value;
EnumTest(int value) {
this.value = value;
}
static EnumTest getByValue(int i) {
for (EnumTest e : values()) {
if (e.value == i) {
return e;
}
}
return null;
}
}
この列挙型を見る将来の開発者について考えてみてください。文書化されていない使用法を残しておくと、values()
新しいアイテムを追加することで誰でもそれを破ることができます。要素の順序を強制するドキュメントがないためです。
int
を値に関連付ける必要がありenum
ます。
できるよ
static final EnumTest[] VALUE = { null, ONE, TWO, THREE };
return VALUE[num];
また
return EnumTest.values()[num-1];
またはマップを使用します。
このように取得しEnumTest.values()[Number-1]
ます。ここで、Numberはあなたの番号です(つまり、1、2、3)。
(たとえば、ONE
インデックス0になり、EnumTest.values()[1]
が得られるため、数値から1を引きますTWO
。)
序数が必要な場合は、次の情報が役立ちます。
それから、あなたはあなたがやりたいことをすることができます。
任意の値を持つプロパティを追加する場合は、列挙型にプロパティ+コンストラクター+ゲッターを作成できます。
public enum EnumTest {
THREE(3), ONE(1), TWO(2);
private int val;
EnumTest(int val) { this.val = val; }
int getVal() { return val; }
}
これはより安定しています(値の名前を変更/挿入/移動しても値は残ります)。
しかし、本当にint値を取得する必要があると確信していますか?可能な場合は、常に列挙型定数を使用する必要があります(例:3ではなくEnumTest.THREE)。
Java列挙型に関するさまざまなチュートリアルをグーグルで検索することをお勧めします。
EnumTest.ordinal()
int値を取得してみてください。0から始まります。
値から列挙型を取得するには、を使用できますEnumTest.values()[i]
。
ありがとう。