我想要一个值为整数的Java枚举。
例如:
public enum TaskStatus {
TaskCreated(1),
TaskDeleted(2)
}
但我也想要这两个常量的自定义名称,如
例如"任务创建"和"任务已删除" (在那里有空格)
我希望尽可能优雅地做到这一点,而不是写作
太多额外的代码。
我可以在没有附加地图的情况下实现这一点 将枚举常量映射到自定义名称?
我在这个项目中使用JDK 6.
答案 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("^ ", "");
}
}