我创建了一个枚举来定义某些操作。针对外部 API 进行编程我被迫使用 anInteger
来表达这个动作。这就是为什么我在我的枚举中添加了一个整数实例字段。这应该与 Joshua Bloch 的 Effective Java 一致,而不是依赖于ordinal()
Enum 常量的顺序或使用values()[index]
.
public enum Action {
START(0),
QUIT(1);
public final int code;
Protocol(int code) {
this.code = code;
}
}
我从 API 获得一个整数值what
,现在我想从中创建一个 Enum 值,我怎样才能以最通用的方式实现它?
显然,添加这样的工厂方法,是行不通的。您不能实例化枚举。
Action valueOf(int what) {
return new Action(what);
}
当然,我总是可以创建一个 switch-case 语句并添加所有可能的代码并返回适当的常量。但我想避免同时在两个地方定义它们。