gpt4 book ai didi

java - 在 Java 中的枚举中使用反向值

转载 作者:行者123 更新时间:2023-12-01 09:56:44 25 4
gpt4 key购买 nike

我有一个具有如下值的枚举(该示例仅显示了一些值,但您会明白的):_800、_830、_900、_24HOURS、CLOSED

这些有一个相应的值,所以我添加到我的枚举中,您可以在 Java 中执行此操作,一个值字段以及该值的 getter 和 setter,如下所示(出于空间原因,我没有显示 getter 和 setter,但它们是标准的):

 enum Hours {
_800("08:00"),
_830("08:30"),
CLOSED("Closed"),
APPT("By Appt.")
// etc
;

Hours(String v) {
val = v;
}
String val;
}

我还希望能够走向另一个方向,也就是说,如果我有一个值(例如“08:00”),我希望它返回枚举_800。因此,我向枚举添加了一张 map :

 static Map<String,String> valToEnumMap = new HashMap();

然后我将其添加到我的构造函数中:

    Hours(String v) {
val = v;
valToEnumMap.put(v, this);
}

和一个新方法:

Hours valToEnum(String v) {
return valToEnumMap(v);
}

但是当我尝试运行它时,我在尝试插入 map 时遇到初始化错误。我尝试过其他事情,例如

 valToEnumMap.put(v, valueOf(name());

但同样的错误。我确实找到了解决方法,但速度很慢,所以我想知道我做错了什么?这是我使用的解决方法,速度很慢:

public static OfficeHoursTimes valToEnum(String val) {
for (OfficeHoursTimes o : OfficeHoursTimes.values()) {
if (o.getVal().equals(val)) {
return o;
}
}
return null;
}

但是必须有更好的方法

最佳答案

问题是您尝试在初始化之前使用映射,因为您的枚举实例是先创建的。

您想像这样声明您的 map :

static final Map<String,Hours> valToEnumMap = _createValueMap();

然后

private static Map<String,Hours> _createValueMap()
{
Map<String, Hours> map = new HashMap<>();

//...iterate through values() and put them all in the map ...

return map;
}

关于java - 在 Java 中的枚举中使用反向值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37161674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com