具有相同名称的枚举值错误

时间:2017-08-23 12:43:12

标签: java java-ee enums

方案

我有枚举

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

在数据库和前端。

USECASE:

任何不在枚举中的状态都应该显示在前端中,如下所示 <CODE> = Undefined

目前,该消息是使用属性属性构建的:

my.properties:

Ausloesungsart.UNDEFINED= {0} \= Unbekannt
Ausloesungsart.FIS=0 \= FIS
Ausloesungsart.MANUELL=1 \= Manuell

3 个答案:

答案 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); }