首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在Java中为枚举指定序数吗?

我可以在Java中为枚举指定序数吗?
EN

Stack Overflow用户
提问于 2011-03-21 09:07:33
回答 3查看 100.7K关注 0票数 74

ordinal()方法返回枚举实例的序号。

如何设置枚举的序号?

EN

回答 3

Stack Overflow用户

发布于 2011-03-21 09:14:03

您可以通过更改枚举的顺序来控制序数,但不能像在C++中那样显式设置它。一种解决方法是在枚举中为您想要的数字提供一个额外的方法:

代码语言:javascript
复制
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

票数 86
EN

Stack Overflow用户

发布于 2014-09-17 22:25:40

您可以使用反射来更新序数:

代码语言:javascript
复制
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);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2011-03-21 11:40:37

简单的答案是:只需更改常量的顺序。第一个定义为0,第二个定义为1,依此类推。然而,如果您有不断变化的代码,或者枚举将有许多值,则这可能不实用。您可以定义一个自定义方法来绕过默认序号,但要确保它有很好的文档记录,以避免混淆!

代码语言:javascript
复制
public enum Values
{
    ONE, TWO, THREE, FOUR;

    public int getCustomOrdinal()
    {
        if(this == ONE)
        {
            return 3;
        }
        else if(this == TWO)
        {
            return 0;
        }
        ...
    }
}
票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5372855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档