Java枚舉類接口實(shí)例原理解析
這篇文章主要介紹了Java枚舉類接口實(shí)例原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
枚舉類可以實(shí)現(xiàn)一個(gè)或多個(gè)接口。與普通類實(shí)現(xiàn)接口完全一樣,枚舉類實(shí)現(xiàn)接口時(shí),需要實(shí)現(xiàn)該接口所包含的方法。
如果需要每個(gè)枚舉值在調(diào)用同一個(gè)方法時(shí)呈現(xiàn)不同的行為,則可以讓每個(gè)枚舉值在{...}匿名塊中實(shí)現(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"));
}
}
為了方便測(cè)試,示例只定義了A和E兩個(gè)等級(jí),執(zhí)行結(jié)果如下:
Lucy Outstanding Tom Fail
反編譯枚舉類
在《Java枚舉抽象方法實(shí)例解析》中介紹了枚舉類型的簡(jiǎn)單使用,現(xiàn)在有必要來(lái)了解一下它的基本實(shí)現(xiàn)原理。實(shí)際上在使用關(guān)鍵字enum創(chuàng)建枚舉類并編譯后,編譯器會(huì)生成一些相關(guān)的類,這些類繼承了Java API中的java.lang.Enum類,也就是說(shuō)通過(guò)關(guān)鍵字enum創(chuàng)建的枚舉類在編譯后事實(shí)上也是一個(gè)類類型而且該類繼承自java.lang.Enum類。
IGradeHandler.class GradeHandlerEnum.class GradeHandlerEnum$1.class GradeHandlerEnum$2.class
使用javac編譯GradeHandlerEnum.java文件后,生成四個(gè)class文件,其中,GradeHandlerEnum.class是枚舉類型,這也就驗(yàn)證前面所說(shuō)的使用關(guān)鍵字enum定義枚舉類并編譯后,編譯器會(huì)自動(dòng)幫助我們生成一個(gè)與枚舉相關(guān)的類。使用jd-gui反編譯后的主要class文件如下:
import java.io.PrintStream;
public enum GradeHandlerEnum implements IGradeHandler {
// 編譯后生成兩個(gè)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) {
//實(shí)例化枚舉實(shí)例,變量名由系統(tǒng)生成
GradeHandlerEnum localGradeHandlerEnum1 = A;
GradeHandlerEnum localGradeHandlerEnum2 = valueOf("E");
System.out.println(localGradeHandlerEnum1.getGrade("Lucy"));
System.out.println(localGradeHandlerEnum2.getGrade("Tom"));
}
}
//枚舉值A(chǔ)對(duì)應(yīng)的枚舉類
enum GradeHandlerEnum$1{
GradeHandlerEnum$1(String paramString1) {
super(paramString, paramInt, paramString1, null);
}
public String getGrade(String paramString) {
return paramString + " Outstanding";
}
}
//枚舉值B對(duì)應(yīng)的枚舉類
enum GradeHandlerEnum$2{
GradeHandlerEnum$2(String paramString1) {
super(paramString, paramInt, paramString1, null);
}
public String getGrade(String paramString) {
return paramString + " Fail";
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用JSCH框架通過(guò)跳轉(zhuǎn)機(jī)訪問其他節(jié)點(diǎn)的方法
下面小編就為大家分享一篇使用JSCH框架通過(guò)跳轉(zhuǎn)機(jī)訪問其他節(jié)點(diǎn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
Java Swing組件編程之JTable表格用法實(shí)例詳解
這篇文章主要介紹了Java Swing組件編程之JTable表格用法,結(jié)合實(shí)例形式詳細(xì)分析了Swing組件中JTable表格的常見定義與使用方法,需要的朋友可以參考下2017-11-11
Selenium Webdriver實(shí)現(xiàn)截圖功能的示例
今天小編就為大家分享一篇Selenium Webdriver實(shí)現(xiàn)截圖功能的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
如何使用SpEL表達(dá)式實(shí)現(xiàn)動(dòng)態(tài)分表查詢
這篇文章主要介紹了如何使用SpEL表達(dá)式實(shí)現(xiàn)動(dòng)態(tài)分表查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Spring學(xué)習(xí)之開發(fā)環(huán)境搭建的詳細(xì)步驟
本篇文章主要介紹了Spring學(xué)習(xí)之開發(fā)環(huán)境搭建的詳細(xì)步驟,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07
java中的編碼轉(zhuǎn)換過(guò)程(以u(píng)tf8和gbk為例)
這篇文章主要介紹了java中的編碼轉(zhuǎn)換過(guò)程(以u(píng)tf8和gbk為例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

