我写了一个图书馆
此库接受有限的选项并打印相关的字符串。
public class Lib {
public enum Num {
ZERO,
ONE,
TWO,
THREE
}
public static void main(String[] args) {
Lib obj = new Lib();
obj.print(Num.ONE);
}
public void print(Num num) {
switch (num) {
case ZERO:
System.out.println("ZERO is "+Num.ZERO.ordinal());
break;
case ONE:
System.out.println("ONE is "+Num.ONE.ordinal());
break;
case TWO:
System.out.println("TWO is "+Num.TWO.ordinal());
break;
case THREE:
System.out.println("THREE is "+Num.THREE.ordinal());
break;
default:
break;
}
}
}
在新版本中,我将禁用选项ONE和TWO
public enum Num {
ZERO,
//ONE,
//TWO,
THREE
}
禁用选项后如何保留正确的值?
答案 0 :(得分:2)
目前尚不清楚你在问什么。如果您更改任何代码,从而删除" "名称"以前存在...当然,任何"参考"任何被删除的元素是...首先:破碎。
如果是枚举,您可能更愿意不依赖内置序数;相反,你可以这样做:
enum Whatever {
ONE(1), TWO(2);
private final int value;
private Whatever(value) {
this.value = value;
}
public int getValue() { return value }
但你必须在这里非常小心。例如,如果您持久化枚举对象(例如某种数据库),那么任何此类更改(添加或删除枚举"值")都将导致不兼容!
答案 1 :(得分:1)
我不确定你想做什么,但例如你可以这样做:
public enum Num {
ZERO,
ONE,
TWO,
THREE
}
switch (num) {
case ZERO:
System.out.println("ZERO is "+Num.ZERO.ordinal());
break;
case THREE:
System.out.println("ZERO is "+Num.THREE.ordinal());
break;
case One:
case Two:
default:
break;
答案 2 :(得分:0)
你现在可能会禁用某些enum并保持原样存储。为了支持这两个方面,你应该有一个方法来返回将在UI上填充的枚举列表。 I.E.列出getPopulatedOnUi()。那包含你需要的枚举列表。 不要从定义本身中删除。保持原样。因为它会为现有产生错误,因为它可能存储在数据库中。
答案 3 :(得分:0)
您可以修改print()方法,如下所示:您可以使用 for loop 代替 switch ,并使代码略显通用。现在,即使您的枚举值发生变化,也无需对此代码进行任何更改。
它会处理这种情况,如果你以后禁用某些枚举值。
public void print(Num num) {
for(Num n : Num.values()) {
if(n == num) {
System.out.println(n.name()+ " is " + n.ordinal());
break;
}
}
}