あなたが持っていると仮定します
public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
int
日曜日が 0、水曜日が 3 などを表すにはどうすればよいでしょうか。
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);
}
}
あなたは呼び出すことができます:
MONDAY.ordinal()
しかし、個人的には、属性を追加しenum
て値を保存し、enum
コンストラクターで初期化し、値を取得する関数を追加します。定数が移動すると の値MONDAY.ordinal
が変わる可能性があるため、これは優れています。enum
API を見てみましょう。これは通常、開始するのに適切な場所です。ENUM_NAME.ordinal() を呼び出す前にこれに遭遇しなければ推測できなかったでしょうが