【发布时间】:2016-05-21 06:59:13
【问题描述】:
我想定义一个枚举器,它可以接受特定的值,但也提供类似 default 的选项,称为 CUSTOM,我可以使用它将枚举器的索引设置为任何整数。
这是我的第一次尝试:
public enum EnumClass {
CUSTOM(),
NONE(0),
OPTION1(-1),
OPTION2(-2);
private int value;
private EnumClass (int value) { this.value = value; }
private EnumClass () {}
public static EnumClass Custom(int value) {
if (-2 <= value && value <= 0) return EnumClass.valueOf(value);
EnumClass result = EnumClass.CUSTOM;
result.value = value;
return result;
}
public int getValue() { return value; }
}
我对这个解决方案的问题是:
-
value通常是final,但我需要不是最终选项才能使选项CUSTOM起作用。 - 每次我尝试使用 -5 甚至 -2 之类的值创建 EnumClass 实例时都会遇到运行时错误。 (显然我的编译器发疯了,因为在我尝试输入 -5 之后,我尝试了 -2,但它仍然告诉我 -5 超出范围。)
- 问题太多了:这个概念有用吗?
【问题讨论】:
-
EnumClass.CUSTOM只有一个实例,因此每次调用Custom(int value)时,所有现有引用的值都会发生变化。我不认为这是你想要的。您似乎在要求一个动态可更新的枚举,它在 Java 中不存在。您当然可以从头开始编写自己的课程来做到这一点。 -
您不能创建枚举值的新实例。枚举非常固定,例如您的示例恰好有 4 个实例,并且在运行时无法更改。如果您需要添加额外的实例,请使用常规类。
标签: java enums enumerator