Java列舉類介面例項原理解析
阿新 • • 發佈:2020-01-19
這篇文章主要介紹了Java列舉類介面例項原理解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
列舉類可以實現一個或多個介面。與普通類實現介面完全一樣,列舉類實現介面時,需要實現該介面所包含的方法。
如果需要每個列舉值在呼叫同一個方法時呈現不同的行為,則可以讓每個列舉值在{...}匿名塊中實現自己的業務邏輯。
public interface IGradeHandler { String getGrade(String studentName); }
public enum GradeHandlerEnum implements IGradeHandler { //five grade levels A B C D E A("90~100") { @Override public String getGrade(String studentName) { return studentName + " Outstanding"; } },E("0~59") { @Override public String getGrade(String studentName) { return studentName + " Fail"; } }; private String score; GradeHandlerEnum(String score) { this.score = score; } public String getScore() { return this.score; } public static void main(String[] args) { GradeHandlerEnum a = GradeHandlerEnum.A; GradeHandlerEnum e = GradeHandlerEnum.valueOf("E"); System.out.println( a.getGrade("Lucy")); System.out.println( e.getGrade("Tom")); } }
為了方便測試,示例只定義了A和E兩個等級,執行結果如下:
Lucy Outstanding Tom Fail
反編譯列舉類
在《Java列舉抽象方法例項解析》中介紹了列舉型別的簡單使用,現在有必要來了解一下它的基本實現原理。實際上在使用關鍵字enum建立列舉類並編譯後,編譯器會生成一些相關的類,這些類繼承了Java API中的java.lang.Enum類,也就是說通過關鍵字enum建立的列舉類在編譯後事實上也是一個類型別而且該類繼承自java.lang.Enum類。
IGradeHandler.class GradeHandlerEnum.class GradeHandlerEnum$1.class GradeHandlerEnum$2.class
使用javac編譯GradeHandlerEnum.java檔案後,生成四個class檔案,其中,GradeHandlerEnum.class是列舉型別,這也就驗證前面所說的使用關鍵字enum定義列舉類並編譯後,編譯器會自動幫助我們生成一個與列舉相關的類。使用jd-gui反編譯後的主要class檔案如下:
import java.io.PrintStream; public enum GradeHandlerEnum implements IGradeHandler { // 編譯後生成兩個class檔案GradeHandlerEnum$1和GradeHandlerEnum$2 A("90~100"),E("0~59"); private String score; //私有建構函式 private GradeHandlerEnum(String paramString) { this.score = paramString; } public String getScore() { return this.score; } public static void main(String[] paramArrayOfString) { //例項化列舉例項,變數名由系統生成 GradeHandlerEnum localGradeHandlerEnum1 = A; GradeHandlerEnum localGradeHandlerEnum2 = valueOf("E"); System.out.println(localGradeHandlerEnum1.getGrade("Lucy")); System.out.println(localGradeHandlerEnum2.getGrade("Tom")); } } //列舉值A對應的列舉類 enum GradeHandlerEnum$1{ GradeHandlerEnum$1(String paramString1) { super(paramString,paramInt,paramString1,null); } public String getGrade(String paramString) { return paramString + " Outstanding"; } } //列舉值B對應的列舉類 enum GradeHandlerEnum$2{ GradeHandlerEnum$2(String paramString1) { super(paramString,null); } public String getGrade(String paramString) { return paramString + " Fail"; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。