ordinal()
方法返回枚举实例的序号。
如何设置枚举的序号?
发布于 2011-03-21 09:14:03
您可以通过更改枚举的顺序来控制序数,但不能像在C++
中那样显式设置它。一种解决方法是在枚举中为您想要的数字提供一个额外的方法:
enum Foo {
BAR(3),
BAZ(5);
private final int val;
private Foo(int v) { val = v; }
public int getVal() { return val; }
}
在这种情况下,是BAR.ordinal() == 0
,而是BAR.getVal() == 3
。
发布于 2014-09-17 22:25:40
您可以使用反射来更新序数:
private void setEnumOrdinal(Enum object, int ordinal) {
Field field;
try {
field = object.getClass().getSuperclass().getDeclaredField("ordinal");
field.setAccessible(true);
field.set(object, ordinal);
} catch (Exception ex) {
throw new RuntimeException("Can't update enum ordinal: " + ex);
}
}
发布于 2011-03-21 11:40:37
简单的答案是:只需更改常量的顺序。第一个定义为0,第二个定义为1,依此类推。然而,如果您有不断变化的代码,或者枚举将有许多值,则这可能不实用。您可以定义一个自定义方法来绕过默认序号,但要确保它有很好的文档记录,以避免混淆!
public enum Values
{
ONE, TWO, THREE, FOUR;
public int getCustomOrdinal()
{
if(this == ONE)
{
return 3;
}
else if(this == TWO)
{
return 0;
}
...
}
}
https://stackoverflow.com/questions/5372855
复制相似问题