34

あなたが持っていると仮定します

public enum Week {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

int日曜日が 0、水曜日が 3 などを表すにはどうすればよいでしょうか。

4

4 に答える 4

92
Week week = Week.SUNDAY;

int i = week.ordinal();

ただし、宣言内の列挙型定数の順序を変更すると、この値が変更されることに注意してください。これを回避する 1 つの方法は、次のように int 値をすべての enum 定数に自己割り当てすることです。

public enum Week 
{
     SUNDAY(0),
     MONDAY(1)

     private static final Map<Integer,Week> lookup 
          = new HashMap<Integer,Week>();

     static {
          for(Week w : EnumSet.allOf(Week.class))
               lookup.put(w.getCode(), w);
     }

     private int code;

     private Week(int code) {
          this.code = code;
     }

     public int getCode() { return code; }

     public static Week get(int code) { 
          return lookup.get(code); 
     }
}
于 2012-07-18T20:52:58.720 に答える
8

あなたは呼び出すことができます:

MONDAY.ordinal()

しかし、個人的には、属性を追加しenumて値を保存し、enumコンストラクターで初期化し、値を取得する関数を追加します。定数が移動すると の値MONDAY.ordinalが変わる可能性があるため、これは優れています。enum

于 2012-07-18T20:54:17.310 に答える
2

API を見てみましょう。これは通常、開始するのに適切な場所です。ENUM_NAME.ordinal() を呼び出す前にこれに遭遇しなければ推測できなかったでしょうが

于 2012-07-18T20:54:58.423 に答える