Java enum 枚舉還可以這么用
在大部分編程語言中,枚舉類型都會是一種常用而又必不可少的數據類型,Java中當然也不會例外。然而,Java中的Enum枚舉類型卻有著許多你意想不到的用法,下面讓我們一起來看看。
1、可以在enum中添加變量和方法
先來看一段代碼示例:
public enum State {
Normal("正常態", 1), Update("已更新", 2), Deleted("已刪除", 3), Fired("已屏蔽", 4);
// 成員變量
private String name;
private int index;
// 構造方法,注意:構造方法不能為public,因為enum并不可以被實例化
private State(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (State c : State .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;
}
} 從上面的代碼中我們可以看到,定義完枚舉值,然后在其后面加上分號,接著就可以定義其他的變量、方法了。另外需要特別說明的是,enum中的構造方法不可以用public標識,這樣做是為了防止用戶實例化enum。
2、可以用來定義常量
先來回顧一下Java中如何定義常量吧,看下面一段代碼:
public static final int normalState = 1; private static final int updateState = 2;
下面我們還可以用enum枚舉來代替上面的常量定義,代碼如下:
public enum State {
Normal, Update, Deleted, Fired
} 在Java中用enum來定義常量在語法上沒有什么優勢,但是enum枚舉類型可以提供更多的操作功能。
3、在enum中實現接口
先來看下面一段代碼:
public interface ICanReadState {
void read();
String getState();
}
public enum State implements ICanReadState {
Normal("正常態", 1), Update("已更新", 2), Deleted("已刪除", 3), Fired("已屏蔽", 4);
private String name;
private int index;
private State(String name, int index) {
this.name = name;
this.index = index;
}
// 接口方法1
@Override
public String getState() {
return this.name;
}
// 接口方法2
@Override
public void read() {
System.out.println(this.index + ":" + this.name);
}
} 和一般的類中使用接口一樣,enum枚舉中同樣可以繼承接口,并實現接口中的所有方法,這樣做的好處在于可以更方便地對枚舉中的值進行排序、比較等操作,封裝性更好。
總結
說白了,enum枚舉類型是一個不可以被繼承的final類,就以上面的State枚舉為例,如果你查看enum類型的字節碼,其實是State類型的類靜態常量。
本文鏈接:http://原網站已經失效/article/java-enum-usage.html
本文作者:碼農網 – 小峰
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!