我有以下类将字符串转换为枚举。但我觉得这不是用枚举做事的正确方法。我怎么能做得更好?
示例(没有意义,但说明了我的问题):
enum LetterType {
ONE, TWO, THREE;
public static LetterType fromValue(String v) {
if (v.equals("A") || v.equals("B")) {
return ONE;
} else if (v.equals("C") {
return TWO;
} else if (v.equals("D") {
return THREE;
}
return null;
}
}
答案 0 :(得分:3)
也许:
enum LetterType {
ONE, TWO, THREE;
private static Map<String, LetterType> stringValues;
static {
stringValues = new HashMap<>();
stringValues.put("A", ONE);
stringValues.put("B", ONE);
stringValues.put("C", TWO);
stringValues.put("D", THREE);
}
public static LetterType fromValue(String v) {
return stringValues.get(v);
}
}
答案 1 :(得分:0)
必须有一些逻辑来确定哪个值映射到哪个枚举。在C中你可以完成一些不可读的技巧,将字符串转换为ASCII码并使用一些公式来确定映射 - 注意我不宽恕这种做法。在Java中,你将不得不做一些更具可读性的东西,你将需要指定哪个值映射到哪个枚举。
您可以使用填充了映射的Map<String, enum_type>
来压缩逻辑,或者使用if / else块。如果你想要一个直接的String - &gt; Enum,其枚举的名称与String的值相同,你可以使用enumVariable.valueOf("StringGoesHere")
,但你的例子似乎没有建议订购。