如何写出从字符串到枚举的良好转换?

时间:2013-10-28 16:17:23

标签: java enums

我有以下类将字符串转换为枚举。但我觉得这不是用枚举做事的正确方法。我怎么能做得更好?

示例(没有意义,但说明了我的问题):

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

2 个答案:

答案 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"),但你的例子似乎没有建议订购。