枚舉淺析


爲何須要枚舉

定義常量

        
    public static final String MON = "Mon";
    public static final String TUE = "Tue";

 	高級點:
	public interface Constants {
	    String MON = "Mon";
	    String TUE = "Tue";
	}

        其實徹底能夠這樣寫:
	public enum Constants {
	//注意:TUE後面沒有「;」
	    MON, TUE
	}
	能夠看出enmu能夠優雅地定義常量。

enum與普通類

javap Constants,反編譯Constants.class的結果:

public final class Constants extends java.lang.Enum<Constants> {
  public static final Constants MON;
  public static final Constants TUE;
  public static Constants[] values();
  public static Constants valueOf(java.lang.String);
  static {};
}
咱們能夠看出它是一個繼承java.lang.Enum類的不可變類,而後它的成員變量是被final static修飾,方法被static修飾。既然枚舉是個特殊的類,固然能夠有構造方法和setter,getter方法,只不過枚舉設計的初心是方便的定義常量,因此就通常只保留getter方法。
//有構造方法和setter、getter方法的枚舉類
public enum EnumTest {
    private String name;
    private int code;

    CURRENT_DAY("星期一",1),
    //注意;結束
    CURRENT_DAY("星期二",2);

    private EnumTest(String name, int code) {
        this.name = name;
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}

枚舉除去有構造方法、getter、setter方法也能夠重寫方法(好比:toString()),也能夠在其中定義行的方法,實現接口等,咱們只要將其理解爲特殊的類就行。
html

enum使用的注意點

(1)enum 類型構造函數使用private或者default修飾。因此枚舉對象沒法在程序中經過直接調用其構造方法來初始化。
(2)定義 enum 類型時,簡單類型:最後一個枚舉值後不用跟任何一個符號;有定製方法,最後一個枚舉值與後面代碼要用分號';'隔開。

enum的更多用法

參考:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.htmljava

相關文章
相關標籤/搜索