特定のアクションを定義するために Enum を作成しました。外部 API に対するプログラミングInteger
このアクションを表現するために を使用せざるを得ません。そのため、Enum に整数インスタンス フィールドを追加しました。ordinal()
これは、 を使用した Enum 定数に依存したり、その順序に依存したりするのではなく、Joshua Bloch の効果的な Java と一致する必要がありますvalues()[index]
。
public enum Action {
START(0),
QUIT(1);
public final int code;
Protocol(int code) {
this.code = code;
}
}
API から整数値を取得し、what
そこから Enum 値を作成したいのですが、これを最も一般的な方法で実装するにはどうすればよいですか?
明らかに、そのようなファクトリ メソッドを追加しても機能しません。Enum をインスタンス化することはできません。
Action valueOf(int what) {
return new Action(what);
}
もちろん、いつでも switch-case ステートメントを作成して、考えられるすべてのコードを追加し、適切な定数を返すことができます。しかし、同時に 2 つの場所でそれらを定義することは避けたいと思います。