2014-04-01 64 views
0

我想要一個Java枚舉,其值是整數。Java枚舉 - 自定義名稱

例如:

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

但我也想爲這兩個常量像
例如自定義名稱「任務創建」和「任務刪除」(在那裏有空格)。
我希望儘可能優雅地做到這一點,而不要寫太多額外的代碼

我可以在沒有附加地圖的情況下達到這個效果嗎?
將枚舉常量映射到它們的自定義名稱?

我在這個項目中使用JDK 6。

回答

12

只需添加一個字段爲:

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,你應該使用枚舉值名稱作爲資源文件的關鍵字。

+0

您可能希望重寫'toString()'方法作爲返回該漂亮字符串值的合適位置。 –

+1

@鄧肯:謝謝,補充說,作爲評論的東西要考慮。 –

+0

謝謝。我會嘗試這個,似乎正是我所需要的。 –

2

一個簡約的答案。 如果序數值足夠,您可以不使用。

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("^ ", ""); 
    } 
}