Java枚举 - 自定义名称

时间:2014-04-01 11:35:09

标签: java enums

我想要一个值为整数的Java枚举。

例如:

public enum TaskStatus {
    TaskCreated(1), 
    TaskDeleted(2)    
}

但我也想要这两个常量的自定义名称,如
例如"任务创建"和"任务已删除" (在那里有空格) 我希望尽可能优雅地做到这一点,而不是写作 太多额外的代码。

我可以在没有附加地图的情况下实现这一点 将枚举常量映射到自定义名称?

我在这个项目中使用JDK 6.

2 个答案:

答案 0 :(得分:13)

只需添加一个字段:

public enum TaskStatus {
    TaskCreated(1, "Task Created"), 
    TaskDeleted(2, "Task Deleted");

    private final int value;
    private final String description;

    private TaskStatus(int value, String description) {
        this.value = value;
        this.description = description;
    }

    // Getters etc

    // Consider overriding toString to return the description
}

如果您不想指定字符串,只想在每个大写字母前添加一个空格,那也是可行的 - 但我个人仍然坚持使用上述方法简单和灵活。 (它将描述与标识符分开。)

当然,如果你想要i18n,你应该只使用枚举值名称作为资源文件的密钥。

答案 1 :(得分:3)

简约的回答。 如果序数值足够,则可以不用。

public enum TaskStatus {
    None,
    TaskCreated, 
    TaskDeleted;

    @Override
    public String toString() {
        // Replace upper-case with a space in front, remove the first space.
        return super.toString()
            .replaceAll("\\p{U}", " $0")
            .replaceFirst("^ ", "");
    }
}