我喜欢这样的
public enum Sizes {
Normal(232), Large(455);
private final int _value;
Sizes(int value) {
_value = value;
}
public int Value() {
return _value;
}
}
现在我可以调用Sizes.Normal.Value()来获取整数值,但是如何将整数值转换回枚举?
我现在所做的是:
public Sizes ToSize(int value) {
for (Sizes size : Sizes.values()) {
if (size.Value() == value)
return size;
}
return null;
}
但这只是这样做的方法吗?这就是Java的工作方式吗?
答案 0 :(得分:8)
是的,它是如何完成的,通常是通过向枚举添加静态方法。想一想;你可以在枚举上有10个字段。您是否希望Java为所有这些设置查找?
这里的要点是Java枚举没有'值'。他们有身份和序数,加上你为自己添加的任何东西。这与C#不同,C#在C ++之后具有任意整数值。
答案 1 :(得分:1)
自从我上次使用Java以来已经有一段时间了,但是如果我没记错的话,你的_value
字段与枚举的序数之间没有任何关系。例如,AFAIK可以有两个具有相同_value
的条目。正如@bmargulies指出的那样,你可以在枚举中包含许多字段,并且没有任何限制你为每个(或全部)使用不同的值。
另见this related question。显然,您无法直接设置条目的序数。