1. 程式人生 > >java enum(列舉)理解

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是單一繼承)