java - 具有数字常量的枚举类型

标签 java

我从遗留系统获取数据,其中某个字节字段是可能包含字母或数字的代码。我想将它映射到一个枚举,但我不确定如何处理数值。

public enum UsageCode {
    A ("Antique"),
    F ("Flood Damaged"),
    N ("New");
//  0 ("Unknown")  How to allow for value of "0"?

    private final String description;

    UsageCode(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

最佳答案

把它翻过来:

public enum UsageCode {
    ANTIQUE ('A'),
    FLOOD_DAMAGED ('F'),
    NEW ('N');
    UNKNOWN ('0')

    private static final Map<Character, UsageCode> charToEnum
            = new HashMap<Character, UsageCode>();

    static { // Initialize map from legacy code to enum constant
        for (UsageCode code : values())
        charToEnum.put(code.getCode(), code);
    }

    // Returns UsageCode for legacy character code, or null if code is invalid
    public static UsageCode fromLegacyCode(char code) {
        return charToEnum.get(code);
    }

    private final char code;

    UsageCode(char code) {
        this.code = code;
    }

    public char getCode() {
        return code;
    }
}

为了将传入的字符代码转换为枚举值,我添加了一个内部 Map<Character, UsageCode>和静态转换方法。

示例改编自 Effective Java 2nd Edition , 第 30 条。

关于java - 具有数字常量的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746724/

相关文章:

java - 实体类中的 IndexQueryBuilder 方法结果为 "failed to index the document [id: 1]"

java - 如何在java中返回字符串中最长的字符序列?

java - Collection.shuffle 与种子随机 - 列表大小为 16 的异常

java - 在 Spring 中绑定(bind)期间溢出数字的自定义消息

java - 报告 Google Appengine 上长请求的进度

java - 有没有像数组一样工作的列表?

java - 为什么我的 Java split 方法导致打印空行?

java - Spring的QueryByExampleExecutor可以与Projections一起使用吗

java - 从 IDE 在终端中运行 java 程序时出现 NoClassDefFoundError

java - 添加不在应用程序上工作的暴民