有没有办法让Java枚举为其元素“丢失”整数值?

时间:2009-07-13 16:55:58

标签: java enums

例如,我在枚举中有两个元素。我希望第一个由整数值0和字符串A表示,但第二个由整数值2和字符串“B”(而不是1)表示。这可能吗?

目前,我的枚举声明为:

public enum Constants {
    ZERO("Zero");
    TWO("Two");
}

如果我得到ZERO和TWO的整数值,我现在分别得到0和1。但是,我想获得0和2。

4 个答案:

答案 0 :(得分:14)

我假设您指的是使Enum的序数返回用户定义值的方法。如果是这种情况,请不要。

如果要返回特定值,请实现(例如getValue())并在Enum构造函数中传递它。

例如:

public enum Constants {
    ZERO("Zero",0),
    TWO("Two",2);

    final private String label;
    final private int value;

    Constants(String label, int value) {
        this.label = label;
        this.value= value;
    }

    public int getValue() {
        return value;
    }

    public String getLabel() {
        return label;
    }
}

答案 1 :(得分:4)

为枚举定义一个适当命名的整数字段,并将其初始化为最适合您的值。枚举的内部序数并不意味着具有意义。

答案 2 :(得分:3)

尝试这样的事情:

public enum MyEnum {

A(1), B(2), C(3);

int myOrdinal;

private MyEnum(int myOrdinal) {
    this.myOrdinal = myOrdinal;
}

public int getMyOrdinal() {
    return myOrdinal;
}

如果你依赖于enum的内部编号,那么排序问题,甚至不同的jvm可以以不同的方式处理它,这会导致不可预测的行为(除非在“enum jsr-161”中指定,否则没有读取它...)。

我看到一个依赖于内部序号的实现,它用于Web下拉框中的排序。一旦有人善意“清理”枚举值,就会产生有趣的错误。

答案 3 :(得分:1)

您想在构造函数中传递一个整数,然后使用     字符串输入= ...     int inputAsInt = Constants.valueOf(input.toUpperCase())。getValue();

这样的东西
public enum Constants{
 ZERO(0),
 TWO(1);
 private final int value;
 public Numbers(int value){
  this.value = value;
 }

 public int getValue(){
  return this.value;
 }
}