枚举当前设置的值

时间:2013-05-22 17:46:13

标签: java enums

这应该是完全明显的,但事实并非如此。有没有办法获得枚举的值,如下例所示?

示例:

    public enum Numbers
    {
        zero, one, two

    }

//later on
Numbers numbers = Numbers.zero;
// this is the part that I can not figure out the java equivalent of?
int number = numbers.value();

这是否有意义我想做什么?

4 个答案:

答案 0 :(得分:5)

通常认为依赖ordinal是不好的做法,因为它基于enum常量的顺序。更好的解决方案是将信息传递给每个实例。只需编写一个这样的构造函数和方法:

public enum Number {
    ZERO(0), ONE(1), TWO(2);

    private int value;

    private Number(int value) {
        this.value = value;
    }

    public int value() {
        return value;
    }
};

然后你就像你想要的那样使用它

Number numbers = Number.ZERO;
int number = numbers.value();

如果稍后添加Number,则无需担心代码的实际顺序。

注意:在Java中,enum名称是单数的,而常量是大写的,这是惯用的。

答案 1 :(得分:3)

根据您的评论,您需要将整数值映射到enum,以将其整合到代码的另一部分中。

而不是依赖于您自己真正想要的顺序:

public enum MyEnum {
    ZERO(0), ONE(1), TWO(2);

    private int mapping;

    MyEnum(int mapping) {
        this.mapping = mapping;
    }

    public int getMapping() {
        return mapping;
    }

} 

然后您可以通过以下方式进行比较:

MyEnum e = MyEnum.ZERO;
if (someInt == e.getMapping()) { ... } 

(或者甚至只是MyEnum.ZERO.getMapping()

答案 2 :(得分:2)

您可以使用ordinal()方法。但是,这是气馁/冒险,因为如果您更改了枚举的顺序或安排,它将失败。例如,你改为两个人的权力

public enum Numbers {
   zero, one, two, four
}

然后four.ordinal()将是3。

如果你真的想要一个与枚举相关联的数字,你应该定义自己的方法,例如: order()或其他什么。在初始实现中,它可以返回ordinal(),但是,当您将来添加four时,您可以更新该方法。

P.S。标准样式是将枚举大写,例如ZERO,ONE等...

答案 3 :(得分:1)

这取决于你需要什么。以下是2个用例:

1)您可能需要测试传入的“数字”的值。对于这个用例,开关盒是最好的解决方案。

void myMethod(Numbers n){

  switch(n){
    case zero:
    //do something
    break;

    case one:
    //do something
    break;

    //etc.
  }
}

2)你可以为每个数字分配一个值并能够检索它。对于此用例,您可以为枚举

定义构造函数
public enum Numbers
{
    zero(0), one(1), two(2);

    private int value;

    private Numbers(int value){
      this.value=value;
    }

}

然后,在您的代码中,您可以获得此值:

void myMethod(Numbers n){
  int value = n.getValue();
  //do something with this value...
}

最后评论:您的枚举名称不符合java惯例。它们应该用大写字母命名,最后用字符'_'命名。例如:一,二,三,另一种