1. 程式人生 > >列舉型別Enum的含義分析

列舉型別Enum的含義分析

列舉型別是一種基本資料型別而不是構造資料型別,從jdk1.5才有的新型別,一般用來做全域性常量

特性:

1.它不能有public的建構函式,這樣做可以保證客戶程式碼沒有辦法新建一個enum的例項,可用來寫單例模式。
2.所有
列舉值都是public , static , final的。注意這一點只是針對於列舉值,我們可以和在普通類裡面定義 變數一樣定義其它任何型別的非列舉變數,這些變數可以用任何你想用的修飾符。
3.Enum覆載了了toString方法,因此我們如果呼叫Color.Blue.toString()預設返回字串”Blue”. 

用法:

1:字串常量(也是最簡潔的單例模式):
//定義
public enum  EnumKey{
    MESSAGE_UPDATE,MESSAGE_DELETE,MESSAGE_ADD;
}

//使用
EnumKey.MESSAGE_ADD.toString();
2:整型常量
//定義
public enum EnumKey {
    MESSAGE_UPDATE(1), MESSAGE_DELETE(2), MESSAGE_ADD(3);

    public int tag;

    EnumKey(int iTag) {
        this.tag = iTag;
    }
}

//使用
int i =EnumKey.MESSAGE_ADD.tag;
3:字串常量(第二種表示方法)
//定義
public enum EnumKey {
    MESSAGE_UPDATE("update"), MESSAGE_DELETE("delete"), MESSAGE_ADD("add");

    public String msg;

    EnumKey(String str) {
        this.msg = str;
    }
}

//使用
String s =EnumKey.MESSAGE_ADD.msg;

4:新增方法
//定義
public enum EnumKey {
    MESSAGE_UPDATE("update", 1), MESSAGE_DELETE("delete", 2), MESSAGE_ADD("add", 3);

    public String msg;
    public int tag;

    EnumKey(String str, int iTag) {
        this.msg = str;
        this.tag = iTag;
    }

    public static boolean getMax(int flag) {
        return flag > 1 ? true : false;
    }
}

//使用
EnumKey.MESSAGE_ADD.getMax(2);

小結:



'
發現什麼了沒?
列舉的每個例項所包含的引數和列舉的構造方法所包含的引數一致 於是你會發現,其實MESSAGE_UPDATE("update", 1)所代表的意思是EnumKey MESSAGE_UPDATE=new EnumKey("update", 1),即:
public  class EnumKey {
    public static String msg;
    public static int tag;

    public EnumKey(String str, int iTag) {
        this.msg = str;
        this.tag = iTag;
    }
}

EnumKey MESSAGE_UPDATE=new EnumKey("update", 1);