1

重複の可能性:
Javaのインデックスから列挙値を取得する方法は?

私は次のような列挙型を持っています:

public enum EnumTest {
    ONE, TWO, THREE
}

1 = ONE 2 = TWO 3=THREEのような整数をどのように持っているか

今、私は2のような整数を取得し、それからEnumTestを生成したいのですが、これ を行うには2を返す必要がありますか?

4

5 に答える 5

6

または、柔軟性を高めるために:

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()新しいアイテムを追加することで誰でもそれを破ることができます。要素の順序を強制するドキュメントがないためです。

于 2012-09-05T11:33:15.860 に答える
3

intを値に関連付ける必要がありenumます。

できるよ

static final EnumTest[] VALUE = { null, ONE, TWO, THREE };

return VALUE[num];

また

return EnumTest.values()[num-1];

またはマップを使用します。

于 2012-09-05T11:31:48.040 に答える
0

このように取得しEnumTest.values()[Number-1]ます。ここで、Numberはあなたの番号です(つまり、1、2、3)。

(たとえば、ONEインデックス0になり、EnumTest.values()[1]が得られるため、数値から1を引きますTWO。)

于 2012-09-05T11:31:29.623 に答える
0

序数が必要な場合は、次の情報が役立ちます。

  • 列挙型定数の序数は、たとえばEnumTest.ONE.ordinal()を使用して取得できます。
  • EnumTest.values()を使用してすべての列挙型定数を取得できます

それから、あなたはあなたがやりたいことをすることができます。

任意の値を持つプロパティを追加する場合は、列挙型にプロパティ+コンストラクター+ゲッターを作成できます。

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列挙型に関するさまざまなチュートリアルをグーグルで検索することをお勧めします。

于 2012-09-05T11:36:23.687 に答える
0

EnumTest.ordinal()int値を取得してみてください。0から始まります。
値から列挙型を取得するには、を使用できますEnumTest.values()[i]

ありがとう。

于 2012-09-05T11:37:29.830 に答える