【发布时间】:2016-09-06 19:09:05
【问题描述】:
我有一个具有这样值的枚举(该示例仅显示了一些值,但您会明白的):_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。所以我在枚举中添加了一张地图:
static Map<String,String> valToEnumMap = new HashMap();
然后我将它添加到我的构造函数中:
Hours(String v) {
val = v;
valToEnumMap.put(v, this);
}
还有一种新方法:
Hours valToEnum(String v) {
return valToEnumMap(v);
}
但是当我尝试运行它时,我在尝试插入地图时遇到初始化错误。我已经尝试过其他的东西,比如
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;
}
但必须有更好的方法
【问题讨论】:
-
枚举应该是不可变的,所以请不要设置器
标签: java constructor enums