我使用以下代码创建了一个枚举:
public enum Operation {
a('0'), b('1');
}
之后我有字节0或1。
现在我需要在这个枚举中使用一个静态类来从一个字节中获取相应的枚举:
public static Operation fromValue(byte value){ ...}
我怎么能这样做?
答案 0 :(得分:3)
您可以选择自动变体来确保所有内容保持同步,而不是像aix那样对交换机进行硬编码。显然,我们可以通过创建HashMap<Byte, Operation>
(您可以在静态块或单个构造函数中初始化它)来优化它,但对于您常用的枚举,应该执行以下操作:
public static Operation fromValue(byte b) {
for (Operation op : values()) {
if (op.b == b) return op;
}
throw new IllegalArgumentException();
}
答案 1 :(得分:2)
这样的东西?
public static Operation fromValue(byte value) {
switch (value) {
case 0: return Operation.a;
case 1: return Operation.b;
default: throw new IllegalArgumentException();
}
}
答案 2 :(得分:2)
您可以在枚举中定义包含相反映射的静态字段:
static Hashtable<byte, Operation> byteToOperation = new Hashtable<byte, Operation>();
并更改枚举的构造函数以执行byteToOperation.put(byteValue, this)
然后在枚举中创建一个静态函数以从此映射中获取操作:
public static Operation fromValue(byte value) {
return byteToOperation.get(value);
}
那样:
Operation.fromValue('0'); //returns Operation.a
Operation.fromValue('1'); //returns Operation.b
每次在枚举中添加元素时,它都会自动添加到地图中。