欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java枚舉類接口實例原理解析

 更新時間:2020年01月16日 15:41:09   作者:樓蘭的胡楊  
這篇文章主要介紹了Java枚舉類接口實例原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下

這篇文章主要介紹了Java枚舉類接口實例原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下

枚舉類可以實現(xiàn)一個或多個接口。與普通類實現(xiàn)接口完全一樣,枚舉類實現(xiàn)接口時,需要實現(xiàn)該接口所包含的方法。

如果需要每個枚舉值在調(diào)用同一個方法時呈現(xiàn)不同的行為,則可以讓每個枚舉值在{...}匿名塊中實現(xiàn)自己的業(yè)務(wù)邏輯。

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兩個等級,執(zhí)行結(jié)果如下:

Lucy Outstanding
Tom Fail

反編譯枚舉類

在《Java枚舉抽象方法實例解析》中介紹了枚舉類型的簡單使用,現(xiàn)在有必要來了解一下它的基本實現(xiàn)原理。實際上在使用關(guān)鍵字enum創(chuàng)建枚舉類并編譯后,編譯器會生成一些相關(guān)的類,這些類繼承了Java API中的java.lang.Enum類,也就是說通過關(guān)鍵字enum創(chuàng)建的枚舉類在編譯后事實上也是一個類類型而且該類繼承自java.lang.Enum類。

IGradeHandler.class
GradeHandlerEnum.class
GradeHandlerEnum$1.class
GradeHandlerEnum$2.class

使用javac編譯GradeHandlerEnum.java文件后,生成四個class文件,其中,GradeHandlerEnum.class是枚舉類型,這也就驗證前面所說的使用關(guān)鍵字enum定義枚舉類并編譯后,編譯器會自動幫助我們生成一個與枚舉相關(guān)的類。使用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;
 //私有構(gòu)造函數(shù)
 private GradeHandlerEnum(String paramString) {
  this.score = paramString;
 }
 
 public String getScore() {
  return this.score;
 }
 
 public static void main(String[] paramArrayOfString) {
//實例化枚舉實例,變量名由系統(tǒng)生成
  GradeHandlerEnum localGradeHandlerEnum1 = A;
  GradeHandlerEnum localGradeHandlerEnum2 = valueOf("E");
  System.out.println(localGradeHandlerEnum1.getGrade("Lucy"));
  System.out.println(localGradeHandlerEnum2.getGrade("Tom"));
 }
}
//枚舉值A(chǔ)對應(yīng)的枚舉類
enum GradeHandlerEnum$1{
 GradeHandlerEnum$1(String paramString1) {
  super(paramString, paramInt, paramString1, null);
 }
 
 public String getGrade(String paramString) {
  return paramString + " Outstanding";
 }
}
//枚舉值B對應(yīng)的枚舉類
enum GradeHandlerEnum$2{
 GradeHandlerEnum$2(String paramString1) {
  super(paramString, paramInt, paramString1, null);
 }
 
 public String getGrade(String paramString) {
  return paramString + " Fail";
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論