Java 中的enum

枚舉應(yīng)該是一個有限集合組成的一個對象

一個簡單的例子:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

枚舉最簡單的就是當(dāng)常量用,但是比常量安全,最常用的就是在switch里面。
其實(shí)枚舉可以當(dāng)個普通的類使用,可以有變量,方法等。
當(dāng)普通類使用的時候,其中有幾個注意點(diǎn):

  • enum不可以有子類,因?yàn)閑num是final的,
  • enum不是繼承其它類,因?yàn)樗J(rèn)已經(jīng)繼承了Enum,但是可以實(shí)現(xiàn)Interface
  • 構(gòu)造方法是private或者是默認(rèn),不能是public的或者protected的

下面一個用作普通類的例子:

package tenum;

interface Next<T> {
    T next();
}

public enum Week implements Next<Week> {
    SUNDAY("Today is Sunday."), MONDAY("Today is Monday"), TUESDAY("Today is Tuesday"), WEDNESDAY(
            "Today is wednesday"), THURSDAY(
                    "Today is Thursday"), FRIDAY("Today is Firday"), SATURDAY("Today is Saturday");

    private String description;

    Week(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    @Override
    public Week next() {
        switch (this) {
        case SUNDAY:
            return MONDAY;
        case MONDAY:
            return TUESDAY;
        case TUESDAY:
            return WEDNESDAY;
        case WEDNESDAY:
            return THURSDAY;
        case THURSDAY:
            return FRIDAY;
        case FRIDAY:
            return SATURDAY;
        case SATURDAY:
            return SUNDAY;
        }
        return null;
    }

    public static void main(String[] args) {
        for (Week w : values()) {
            System.out.println(w.getDescription());
        }
        System.out.println("------------------------------");
        for (Week w : Week.class.getEnumConstants()) {
            System.out.println(w.getDescription());
        }
        System.out.println("------------------------------");
        //星期一之后2天是周幾
        System.out.println(Week.MONDAY.next().next().getDescription());
    }

}

輸出結(jié)果:

Today is Sunday.
Today is Monday
Today is Tuesday
Today is wednesday
Today is Thursday
Today is Firday
Today is Saturday
------------------------------
Today is Sunday.
Today is Monday
Today is Tuesday
Today is wednesday
Today is Thursday
Today is Firday
Today is Saturday
------------------------------
Today is wednesday

上面兩種來獲取所有元素,一種是調(diào)用values()方法,一種是通過class 對象的getEnumConstants()方法。
有趣的是values()方法,enum 是繼承Eunm.java,但是Enum.java里面并沒有values()方法。怎么來的呢?其實(shí)是編譯器為我們自動生成的。如果你自己在定義這個方法,編譯器就會報錯“The enum Week already defines the method values() implicitly”。
讓我們來看看編譯器生成的class 文件。

Warning: Binary file Week contains tenum.Week
Compiled from "Week.java"
public final class tenum.Week extends java.lang.Enum<tenum.Week> implements tenum.Next<tenum.Week> {

  public static final tenum.Week SUNDAY;
  public static final tenum.Week MONDAY;
  public static final tenum.Week TUESDAY;
  public static final tenum.Week WEDNESDAY;
  public static final tenum.Week THURSDAY;
  public static final tenum.Week FRIDAY;
  public static final tenum.Week SATURDAY;
  static {};
  public java.lang.String getDescription();
  public tenum.Week next();
  public static void main(java.lang.String[]);
  public static tenum.Week[] values();
  public static tenum.Week valueOf(java.lang.String);
  public java.lang.Object next();
  static int[] $SWITCH_TABLE$tenum$Week();
}

從上面可以看到幾點(diǎn),1)class 是final的,2)自動生成values()方法,3)繼承了Enum類

參考:
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
https://www.ibm.com/developerworks/cn/java/j-lo-enum/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評論 18 399
  • 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對象:僅僅是創(chuàng)建對象的方法,并非Fa...
    孫小磊閱讀 2,184評論 0 3
  • 夢里不知身是客。一晌貪歡。
    第四根指尾涼閱讀 160評論 0 0
  • 02 那我以后可以喊你男神嗎 在我們學(xué)校,高三黨的日子并不好過,除了像我一樣的通校生,那些住宿的學(xué)生只能...
    夏暖瓊閱讀 197評論 0 0
  • 不一樣的卡梅拉之我要救出貝里奧。 卡梅利多和卡門我了幫助貝里奧的羊毛不被剪掉,把他帶到一片神秘的巨石林,沒想到在那...
    葛奕軒閱讀 239評論 0 0

友情鏈接更多精彩內(nèi)容