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 に答える