你真的懂枚舉嗎

enum關鍵字與class和interface地位相同,其同樣有成員變量、方法、能夠實現一個或多個接口,也能夠有構造器
vue

枚舉類與普通類的區別

  • 枚舉類的父類是java.lang.Enum類
  • 非抽象枚舉類默認使用final修飾,不能存在子類
  • 枚舉類的構造器只能使用private修飾符,默認就是private
  • 枚舉類的全部實例必須在枚舉類的第一行顯式列出,不然這個枚舉類永遠不能產生實例,列出的實例,系統會自動添加public static final修飾

    抽象的枚舉類,系統默認使用abstract修飾,而不用final修飾java

package com.em;public enum EmFestival {    //會產生以下四個實例
    SPRING,SUMMER,FALL,WINTER;
}

枚舉值就表明可能會產生的實例vuex

package com.em;public class FestivalTest {    public static String jude(EmFestival v){        switch (v) {        case SPRING:            return "春天";        case SUMMER:            return "夏天";        case FALL:            return "秋天";        case WINTER:            return "冬天";
        }        return null;
    }    public static void main(String[] args) {
        System.out.println(jude(EmFestival.SPRING));
    }
}

爲何使用枚舉類?

  • 存在命名空間,能夠將其餘的靜態常量區分開
  • 打印輸出的意義明確,不想普一般量那樣,都用數字表示含義,沒法直接表達含義

    枚舉類方法

  • compare(E o):用於與指定的枚舉對象比較順序,同一個枚舉實例只能與相同類型的枚舉實例進行比較。若是該枚舉對象位於指定枚舉對象以後,則返回正整數
  • name():返回此枚舉實例的名稱
  • ordinal():返回枚舉值在枚舉類中的索引值(從0開始)
  • toString():與name方法一致,推薦使用toString
  • valueOf():一個靜態方法,用於返回指定枚舉類中指定名稱的枚舉值
package com.em;public enum EmFestival {    //會產生以下四個實例
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    private final String fest;    private EmFestival(String fest){        this.fest=fest;
    }    public String getFest() {        return fest;
    }

}

實現接口的枚舉類

枚舉類實現接口,與正常類沒有什麼區別微信

package com.em;import java.io.FileDescriptor;import java.io.IOException;import sun.nio.ch.SelChImpl;import sun.nio.ch.SelectionKeyImpl;public enum EmFestival implements SelChImpl{//    會產生以下四個實例
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    @Override
    public boolean isOpen() {        // TODO Auto-generated method stub
        return false;
    }    @Override
    public void close() throws IOException {        // TODO Auto-generated method stub

    }    @Override
    public FileDescriptor getFD() {        // TODO Auto-generated method stub
        return null;
    }    @Override
    public int getFDVal() {        // TODO Auto-generated method stub
        return 0;
    }    @Override
    public void kill() throws IOException {        // TODO Auto-generated method stub

    }    @Override
    public void translateAndSetInterestOps(int arg0, SelectionKeyImpl arg1) {        // TODO Auto-generated method stub

    }    @Override
    public boolean translateAndSetReadyOps(int arg0, SelectionKeyImpl arg1) {        // TODO Auto-generated method stub
        return false;
    }    @Override
    public boolean translateAndUpdateReadyOps(int arg0, SelectionKeyImpl arg1) {        // TODO Auto-generated method stub
        return false;
    }    @Override
    public int validOps() {        // TODO Auto-generated method stub
        return 0;
    }    private final String fest;    private EmFestival(String fest){        this.fest=fest;
    }    public String getFest() {        return fest;
    }

}

包含抽象方法的枚舉類

枚舉類裏定義抽象方法時不能使用abstract關鍵字將枚舉類定義成抽象類(由於系統自動會添加abastract),但由於枚舉類須要顯式建立枚舉值,而不是做爲父類,因此定義每一個枚舉值時必須爲抽象方法提供實現,不然出現編譯錯誤markdown

package com.em;public enum EmFestival {    // 會產生以下四個實例
    SPRING("春天") {        @Override
        public String getFestival() {            return "春天";
        }
    },
    SUMMER("夏天") {        @Override
        public String getFestival() {            return "夏天";
        }
    },
    FALL("秋天") {        @Override
        public String getFestival() {            return "秋天";
        }
    },
    WINTER("冬天") {        @Override
        public String getFestival() {            return "冬天";
        }
    };    public abstract String getFestival();    private final String fest;    private EmFestival(String fest) {        this.fest = fest;
    }    public String getFest() {        return fest;
    }
}

更多內容能夠關注微信公衆號,或者訪問AppZone網站app


本文分享自微信公衆號 - 跡說(Lets_Talk_About)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。ide

相關文章
相關標籤/搜索