java enum(列舉)理解
下面我在使用enum過程中一些經驗和總結,主要包括如下內容:
1.原始的介面定義變數
2.語法(定義)
3.遍歷 ,swich等常用操作
4.enum物件的常用方法介紹
5.給enum自定義屬性和方法
6.enum的原理分析
7.總結
原始的介面定義變數
public interface IConstants{
String MON=“mon”;
String TUE="Tue";
String WED="Wed";
}
語法定義
建立列舉型別要使用enum關鍵字,隱含了所建立的型別都是java.lang.Enum類的子類(java.lang.Enum是一個抽象類)。列舉型別符合通用模式(class Enum<E extends Enum<E>>),而E表示列舉型別的名稱。
public enum EnumTest{
MON,TUE,WED;
}
這段程式碼其實呼叫了3次Enum(String name,String ordinal)
new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);
遍歷,swich常用操作
對enum進行遍歷和swich的操作示例
package com.ichezheng.insurance.controller; import com.ichezheng.insurance.util.CtrUtils; import結果是:com.ichezheng.insurance.util.JSONFormatUtil; import com.ichezheng.insurance.util.WeiXinUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import java.util.Map; /** * @Author wangkun * @Date 2016/8/30 10:09 */ //定義列舉 enum tool { RED("紅色", 1); private tool(String color,int num){ this.color=color; this.num=num; } private String color; private int num; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } } public class ToolController { public static void main(String[] args) {for (tool t:tool.values()){ switch (t.getNum()){ case 1: System.out.println("輸出紅色"); break; case 2: System.out.println("輸出綠色"); break; case 3: System.out.println("輸出白色"); break; default: System.out.println("輸出黃色"); } } } }
輸出紅色
enum物件常用方法介紹
int compareTo(E o)
比較此列舉與指定物件的順序
class<E> getDeclaringClass()
返回與此列舉常量的列舉型別相對應的class物件
string name()
返回此列舉常量名稱,在其列舉宣告中對其進行宣告
int ordinal()
返回列舉常量順序
enum自定義屬性和方法
public class Test { 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 static void main(String[] args) { System.out.println(Color.RED.toString()); } }
輸出結果是 1_紅色
原理分析
enum的語法結構儘管和class的語法不一樣,但是經過編譯器之後產生的是一個class檔案。該class檔案經過反編譯可以看到實際上是生成了一個類。該類繼承了java.lang.Enum<E> 。EnumTest經過反編譯之後可以得到以下內容
public class com.ichezheng.insurance.controller.EnumTest extends java.lang.Enum{
public static final com.ichezheng.insurance.controller MON;
public static final com.ichezheng.insurance.controller TUE;
public static final com.ichezheng.insurance.controller WED;
}
所以,實際上enum就是一個class,只不過java編譯器幫我們幫我們做了語法解析與編譯而已
總結
可以把enum看成是一個普通的class,它們都可以定義一些屬性和方法,不同之處是:enum不能使用extends 關鍵字繼承其它類,因為enum已經繼承了java.lang.enum(java是單一繼承)