Java enum的7種常見的用法
阿新 • • 發佈:2018-11-22
enum是一個特殊的Java類,繼承自java.lang.Enum,但又是一個不能夠被繼承的final類。它可以定義在interface或class中,也有建構函式、方法、資料域。
列舉類的構造器與普通類的構造器有些不同:
(1)構造器僅僅是在構造列舉值的時候被呼叫。
(2)構造器是私有的,這樣能保證外部程式碼無法新建列舉類的例項。
下面是繼承自Enum的方法:
(1)ordinal()
返回列舉值在列舉種類的順序,這個順序依據列舉值宣告的順序。
(2)compareTo()
Enum實現了java.lang.Comparable介面,它返回的是兩個列舉值的順序之差,但這兩個列舉值必須屬於同一個列舉類。
(3)values()
返回一個包含所有列舉值的陣列。
(4)toString()
返回列舉常量的名稱。
(5)valueOf
類似toString
(6)equals
比較兩個列舉類物件的應用。
用法一:常量
我們一般定義常量都是public static final,現在好了,有了列舉,可以把相關的常量分組到一個列舉型別裡。
public enum Color {
RED, GREEN, BLANK, YELLOW
}
用法二:switch
能使我們的程式碼可讀性更強。
enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }
用法三:向列舉中新增新方法
如果打算自定義自己的方法,那麼必須在enum例項序列的最後新增一個分號,而且必須先定義enum例項。
public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4); // 成員變數 private String name; private int index; // 構造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
用法四:覆蓋列舉的方法
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變數
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//覆蓋方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
用法五:實現介面
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變數
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//介面方法
@Override
public String getInfo() {
return this.name;
}
//介面方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
用法六:使用介面組織列舉
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
用法七:關於列舉集合的使用
java.util.EnumSet和java.util.EnumMap是兩個列舉集合。EnumSet保證集合中的元素不重複,EnumMap中的key是enum型別,而value則可以是任意型別。