我有一个Enum,我想将其用作符号名(NORMAL,SPICY,HOT)及其关联值(11、22、33)之间的映射。
让我们说程序应该使用符号,并且数据库中存储的是值。
public static enum MyEnum
{
NORMAL (11),
SPICY (22),
HOT (33);
private int n;
MyEnum (int n) // must be a private constructor because of Java
{
this.n = n;
}
public static void initFromNumber (int n)
{
// ??? how to do that
}
public int get ()
{
return this.n;
}
};
现在,我从数据库中读取并尝试创建/初始化枚举。
如何使用枚举(很明显,我可以使用一个类)和来做到这一点而又没有很大的IF或SWITCH?有“优雅”的方式吗?
答案 0 :(得分:1)
通常在我的应用程序中,我将遍历所有值并找到匹配的值。
public static MyEnum getByNumber(int n) {
for (final MyEnum value : values()) {
if (value.n == n) {
return value;
}
}
throw new IllegalArgumentException("No MyEnum found for n: " + n);
}
答案 1 :(得分:1)
Enum
是单例,您不能仅对其进行初始化。您很可能希望通过数字获得枚举值。您可以使用流来做到这一点:
public static void initFromNumber (int n)
MyEnum enumValue = Arrays.stream(MyEnum.values())
.filter(myEnum -> myEnum.get() == n)
.findFirst().orElseThrow();
}