0

我有以下将字符串转换为枚举的类。但我觉得这在某种程度上不是用枚举做事的正确方法。我怎样才能做得更好?

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

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

2 回答 2

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

}

于 2013-10-28T16:23:31.900 回答
0

必须有一些逻辑来确定什么值映射到哪个枚举。在 C 语言中,您可以通过将字符串转换为其 ASCII 代码并使用一些公式来确定映射来完成一些不可读的技巧——请注意,我不容忍这种做法。在 Java 中,您将不得不做一些更具可读性的事情,并且以一种或另一种方式,您将需要指定哪个值映射到哪个枚举。

您可以使用Map<String, enum_type>填充映射来压缩逻辑,也可以使用 if/else 块。如果您想要一个直接的 String-->Enum ,其中枚举的名称与字符串的值相同,您可以使用enumVariable.valueOf("StringGoesHere"),但您的示例似乎没有建议这种排序。

于 2013-10-28T16:21:32.613 回答