我有枚举
UNDEFINED(-1),
FIS(0),
MANUELL(1)
定义为
public enum Ausloesungsart { UNDEFINED( -1), FIS( 0), MANUELL( 1); }
但是在运行时,如果列表中没有UNDEFINED
包含已解析的代码,则添加另一个枚举,如123
中所示。
以下是我对Enum的看法:
public static Ausloesungsart fromIdentifier(Integer code) {
if (enumsByIdentifier.containsKey(code)) {
return enumsByIdentifier.get(code);
} else {
enumsByIdentifier.put(code, Ausloesungsart.UNDEFINED);
return enumsByIdentifier.get(code);
}
}
现在列表应该包含
UNDEFINED(-1),
FIS(0),
MANUELL(1),
UNDEFINED(123)
解析文件时,显然会设置值88并搜索它。 但是它在前端返回-1。
它甚至都没有跳进其他的clausel,不知何故它已经进入了?
知道我错过了什么吗?
解析发生的地方:
Ausloesung ausloesung = new Ausloesung(Ausloesungsart.fromIdentifier(header.getReleaseType()));
此时,releaseType
为123
但最后有-1 = Undefined
而不是
123 = Undefined
在数据库和前端。
任何不在枚举中的状态都应该显示在前端中,如下所示
<CODE> = Undefined
目前,该消息是使用属性属性构建的:
my.properties:
Ausloesungsart.UNDEFINED= {0} \= Unbekannt
Ausloesungsart.FIS=0 \= FIS
Ausloesungsart.MANUELL=1 \= Manuell
答案 0 :(得分:1)
然而在运行时我正在添加另一个枚举,如果它没有包含在内 使用解析的代码将列表作为UNDEFINED,如123中所示。
枚举旨在表示不可变的事物 您无法在运行时添加新的枚举值,也不应尝试修改实际值。
但是它在前端最后返回-1。
将整数值与映射中的枚举值相关联不会修改枚举本身的状态
如果多个整数值可能与UNDEFINED
枚举值相关联,并且在编译时未指定这些整数值,则可能不应使用枚举字段来设置此信息。
这并不意味着UNDEFINED
枚举无法与多个数值相关联。但这不应该直接在枚举值的状态中完成。
您可以使用提供两个信息的自定义类:String
占位符和数字代码
您可以在Ausloesungsart
中引入一个返回它的静态方法。
public static getAusloesungsartWithValue(Integer code){
for (Ausloesungsart current : values()){
if (current.numericValue.equals(code)){
return new AusloesungsartWithValue(current, code);
}
}
return new AusloesungsartWithValue(UNDEFINED, code);
}
然后叫它:
AusloesungsartWithValue value = Ausloesungsart.getAusloesungsartWithValue(123); // UNDEFINED
AusloesungsartWithValue otherValue = Ausloesungsart.getAusloesungsartWithValue(0); // FIS
答案 1 :(得分:0)
你是什么意思&#34;它在前端&#34;最后返回-1。你可能实现它是这样的:
enum Ausloesungsart {
UNDEFINED(-1),
FIS(0),
MANUELL(1);
private int value;
public void getValue() { return value; }
}
现在,您可以将这些枚举项目放入所需的地图中,其值永远不会改变。
要显示您在此答案评论中提及的列表,请执行
for (int value : yourList) {
Ausloesungsart art = Arrays.stream(Ausloesungsart.values())
.filter(a -> a.getValue() == value)
.findFirst().orElse(Ausloesungsart.UNDEFINED);
System.out.println(String.format("<%d>: %s", value, art.toString());
}
答案 2 :(得分:0)
你正在将值放在地图上,这是有效的......你将永远无法工作的是你返回一个带有整数属性的枚举......
你的方法是在地图
中进行插入所以你最终可以有像
这样的东西UNDEFINED(-1),
FIS(0),
MANUELL(1),
UNDEFINED(123),
UNDEFINED(1231),
UNDEFINED(12311),
UNDEFINED(1233123),
但所有这些卡片仍然是相同的枚举:Ausloesungsart.UNDEFINED
无论地图发生多大变化,最后都会有相同的枚举
public enum Ausloesungsart { UNDEFINED( -1), FIS( 0), MANUELL( 1); }