例如,我在枚举中有两个元素。我希望第一个由整数值0和字符串A表示,但第二个由整数值2和字符串“B”(而不是1)表示。这可能吗?
目前,我的枚举声明为:
public enum Constants {
ZERO("Zero");
TWO("Two");
}
如果我得到ZERO和TWO的整数值,我现在分别得到0和1。但是,我想获得0和2。
答案 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;
}
}