我想要一個Java枚舉,其值是整數。Java枚舉 - 自定義名稱
例如:
public enum TaskStatus {
TaskCreated(1),
TaskDeleted(2)
}
但我也想爲這兩個常量像
例如自定義名稱「任務創建」和「任務刪除」(在那裏有空格)。
我希望儘可能優雅地做到這一點,而不要寫太多額外的代碼
。
我可以在沒有附加地圖的情況下達到這個效果嗎?
將枚舉常量映射到它們的自定義名稱?
我在這個項目中使用JDK 6。
我想要一個Java枚舉,其值是整數。Java枚舉 - 自定義名稱
例如:
public enum TaskStatus {
TaskCreated(1),
TaskDeleted(2)
}
但我也想爲這兩個常量像
例如自定義名稱「任務創建」和「任務刪除」(在那裏有空格)。
我希望儘可能優雅地做到這一點,而不要寫太多額外的代碼
。
我可以在沒有附加地圖的情況下達到這個效果嗎?
將枚舉常量映射到它們的自定義名稱?
我在這個項目中使用JDK 6。
只需添加一個字段爲:
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
}
如果您不想指定的字符串,只想每個大寫字母前添加一個空格,這是可行的 - 但我個人」 d堅持簡單和靈活的上述方法。 (它將描述與標識符分開。)
當然,如果你想要i18n,你應該使用枚舉值名稱作爲資源文件的關鍵字。
一個簡約的答案。 如果序數值足夠,您可以不使用。
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("^ ", "");
}
}
您可能希望重寫'toString()'方法作爲返回該漂亮字符串值的合適位置。 –
@鄧肯:謝謝,補充說,作爲評論的東西要考慮。 –
謝謝。我會嘗試這個,似乎正是我所需要的。 –