Java 同名枚举的值错误 脚本

Java 同名枚举的值错误 脚本,java,jakarta-ee,enums,Java,Jakarta Ee,Enums,我有枚举 UNDEFINED(-1), FIS(0), MANUELL(1) 定义为 public enum Ausloesungsart { UNDEFINED( -1), FIS( 0), MANUELL( 1); } 但是,在运行时,如果列表中没有包含另一个枚举,那么我将添加另一个枚举,如123中的UNDEFINED 以下是我如何使用枚举: public static Ausloesungsart fromIdentifier(Integer code) { if (

我有枚举

UNDEFINED(-1),
FIS(0),
MANUELL(1)
定义为

public enum Ausloesungsart { UNDEFINED( -1), FIS( 0), MANUELL( 1); }
但是,在运行时,如果列表中没有包含另一个枚举,那么我将添加另一个枚举,如
123
中的
UNDEFINED

以下是我如何使用枚举:

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

通知 它甚至从来没有跳进else条款,不知怎的它已经在了

知道我错过了什么吗

编辑: 解析发生的位置:

Ausloesung ausloesung = new Ausloesung(Ausloesungsart.fromIdentifier(header.getReleaseType()));
此时,
releaseType
为123

但最终还是有
-1=未定义
而不是

123 = Undefined
在数据库和前端

用例: 任何不在枚举中的状态都应显示在前端,如中所示
=未定义

当前,消息是使用属性属性生成的:

my.properties:

Ausloesungsart.UNDEFINED= {0} \= Unbekannt
Ausloesungsart.FIS=0 \= FIS
Ausloesungsart.MANUELL=1 \= Manuell
但是,在运行时,如果枚举不包含在 该列表未使用解析代码定义,如123所示

枚举被设计用来表示不变的事物。
不能在运行时添加新的枚举值,也不应尝试修改实际值

但是,它在前端的末尾返回-1

将整数值与映射中的枚举值关联不会修改枚举本身的状态。
如果多个整数值可能与
未定义的
枚举值关联,并且在编译时未指定这些整数值,则可能不应使用枚举字段来设置此信息。

这并不意味着
未定义的
枚举不能与多个数值关联。但这不应直接在枚举值的状态本身中执行。
您可以使用提供两种信息的自定义类:
字符串
占位符和数字代码。
您可以在
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”是什么意思。您可能实现了如下操作:

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());
}
for(int值:yourList){
Ausloesungsart=Arrays.stream(Ausloesungsart.values())
.filter(a->a.getValue()==值)
.findFirst().orElse(Ausloesungsart.UNDEFINED);
System.out.println(String.format(“:%s”,value,art.toString());
}

您正在将值放入映射中,这是有效的…您永远无法使用的是返回带有该整数属性的枚举

您的方法是在地图中插入

所以最后你可以有类似的东西

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

该枚举是以Ausloesungsart的名称声明的?对吗?抱歉…错过了它!
公共枚举Ausloesungsart{UNDEFINED(-1),FIS(0),MANUELL(1);}
@ΦXocę웃Пepeúpaツ 编辑:
enumsByIdentifier.put(代码,Ausloesungsart.UNDEFINED)
或者您的确切意思是什么,添加的枚举也是类型
Ausloesungsart
您正在将值放入映射中并且正在工作…您永远无法工作的是,您返回一个带有整数属性的枚举…我认为枚举是不可变的…因此您永远无法在运行时更改枚举…这意味着,您的return值正确地为-1。您可能希望阅读以下内容:只有一个实例未定义,代码为-1。从不使用88。但是TenumsByIdentifier将保留从88到未定义(-1)的映射。因此没有机会访问
未定义(88)
?@0x45抱歉,未定义(88)在我没有注意到的情况下滑入其中;这甚至是无效的。枚举中只能有一个未定义的值。我从答案中删除了88个值。并且正在覆盖工作,因为这对我有用case@0x45我不知道在此上下文中覆盖是什么意思;您当然可以添加一个setValue()。但是,这将破坏代码在使用位置的未定义。您可能应该说明您尝试实现的确切用例,因为您尝试的似乎只是概念上的错误。用例是:任何不在枚举中的状态都应显示为
=undefined”
在frontendEnum定义枚举值是的,但是与每个枚举值关联的数值:
-1,1,0
应该是常量呃,这将在我的体系结构中改变很多…没有任何方法可以通过值访问新创建的枚举吗?您无法在运行时创建新的枚举值。很抱歉,如果不这样做,您的架构存在缺陷,情况可能会变得更糟。为了不破坏太多客户端代码,您可以引入一个同时包含枚举和关联数值的类。它可以有一个构造函数,例如
MyClassWithEnum(Ausloesungsart enum,Integer value)
。然后为该类提供与枚举值相同的API,它应该不会太差。编辑我的问题与用例,你的意见如何?它不会改变问题。我编辑以说明我在注释中所说的内容。