[JAVA] Override ENUM valuelOf
前言
ENUM 是一個在開發時基本上一定會用的
ENUM 可以有效的管理字串、static 類型常數、配合 switch case
當然
是否有必要把所有的字串、static 類型常數都給 ENUM 管理
這個就必須要視開發需求而定了
因為每個情境不同
所以在開發的時候就需要先想一下
正題
在使用 ENUM 到現在,個人覺得跟 HashMap 很像
舉個例子:
EX-1
public enum ENUM_EXAMPLE {
A("a"),
B("b"),
C("c"),
D("d"),
E("e");
}
從上面的例子來看就像是個 Key 配一個 Value
前面提到
ENUM 可以有效的管理字串、static 類型常數、配合 switch case
為什麼要把字串兩個字用不同顏色表示
因為我在開發的時候碰到一個問題
今天開發時遇到說有一大推的數字編碼
每個編碼代表著不同意思
這個時候第一個想到的就是用 ENUM 統一管理、統一存取
但是問題來了,ENUM 不支援純數字
這個時候我選擇這樣做
EX-2
public enum ENUM_EXAMPLE {
CODE_100("100"),
CODE_101("101"),
CODE_102("102"),
CODE_103("103"),
CODE_104("104");
}
但這樣這樣並不算把問題完全解決
前面說過這是一堆數字編碼
每個數字都代表著不同意思
這樣的寫法雖然解決了 ENUM 不支援純數字的問題
但是卻根本沒辦法閱讀辨識
所以我在改成這樣
EX-3.1
public enum ENUM_EXAMPLE {
AGE("100"),
YEAR("101"),
MONTH("102"),
DAY("103"),
TIME("104");
}
這樣好閱讀多了
至於要怎麼取得 ENUM 其實很簡單
ENUM 有一個valueOf() 方法
這個方法可以讓你傳入參數後得到對應的 ENUM
以上面的 EX-3.1 來看
我輸入 ENUM_EXAMPLE.valueOf("103") 會得到 DAY
答案是錯的,這樣子會發生 Exception
難道要再寫一個 Method 把 103 轉成 DAY 在用 valueOf 取得 ENUM 嗎?
真的這樣做的話這個 ENUM 就沒甚麼意義存在了
這延伸的問題也就是這篇文章的重點了
主要是參考這篇得到的方法
講白一點就是 Override valueOf 這個 Method
但是似乎 ENUM 不給你 Override valueOf
所以就只好自己寫一個啦
EX-3.2
public enum ENUM_EXAMPLE {
AGE("100"),
YEAR("101"),
MONTH("102"),
DAY("103"),
TIME("104;
private String value;
ENUM_EXAMPLE(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public static ENUM_EXAMPLE getEnum(String value) {
for(ENUM_EXAMPLE v : values()) {
if (v.getValue().eqalsIgnoreCase(calue)) {
return v;
}
}
}
}
這樣子就可以了
大家可以試看看