top of page

[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;

}

}

}

}

這樣子就可以了

大家可以試看看


bottom of page