这篇文章主要介绍了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, paramInt, paramString1, null);

}

public String getGrade(String paramString) {

return paramString + " Fail";

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java枚举类型原理_Java枚举类接口实例原理解析相关推荐

  1. java枚举类型赋值_java枚举类型(转载)

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

  2. java 枚举类型初始化_java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enumColorSelect { RED_BAGE= 0, GREEN_BAGE, BL ...

  3. Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)

    01: Java–枚举类型(枚举类型介绍 & 定义枚举类型 & 枚举类型的使用 & 枚举类型的注意事项 & 遍历枚举项) 02: Java–枚举类型(枚举类型实现接口 ...

  4. c枚举类型enum例题_c枚举类型enum用法 枚举类型enum用法 怎么去取所有

    JUDGE(S W ) 指 W 属于 S 枚举类型还是自定义函数里的2个变量不要太久太久不联系我,我怕我一不小心把你忘了. (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素 ...

  5. java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  6. java实体类中有枚举类型_当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?...

    当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...

  7. java枚举变量带括号_java枚举类型 - 墨梅的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

  8. java枚举类型定义_java中的枚举类型怎么定义?

    展开全部 Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自62616964757a686964616fe59b9ee7ad9431333236366331己的变量, ...

  9. java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码

    文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...

最新文章

  1. 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)
  2. charles使用说明(基于mac)
  3. Java 8中的默认方法(Defender方法)简介
  4. 分享:wkhtmltoimage开源工具的基本应用
  5. 朝花夕拾——finally/final/finalize拨云雾见青天
  6. linux依赖包在哪个目录,命令-Linux cmd在jar中搜索类文件,而与jar路径无关
  7. LeetCode 1248. 统计「优美子数组」(要复习)
  8. keras安装_代码详解:构建一个简单的Keras+深度学习REST API
  9. 【报告分享】2019全球住宅报告.pdf(附下载链接)
  10. linux 索引,Linux学习笔记-索引类命令
  11. 好消息:Dubbo Spring Boot要来了
  12. voip语音中转服务器,基于VoIP的语音应用服务器的设计与实现
  13. newifid1网页服务器,newifi d1刷老毛子固件测试
  14. A Neural Algorithm of Artistic Style : Neural Style Transfer with Eager Executon
  15. DW标签使用与javascript文档基础介绍
  16. 第一时间获取文章,可以关注本人公众号:月牙寂道长
  17. 按压式按摩靠背的设计
  18. Android R系统aidl文件怎么对应的java文件找不到了?
  19. Vue用图片制作Wifi动态图 制作小喇叭效果
  20. HTB_Responder 综合靶机 菜菜被虐现场实录

热门文章

  1. java word 超链接到文档内部_Java 添加超链接到 Word 文档方法详解
  2. C++各大有名库的介绍——XML
  3. xml文档声明及基本语法
  4. [附源码]JSP+ssm计算机毕业设计学生毕业离校交接系统4jea2【源码、数据库、LW、部署】
  5. pyecharts 间距_吉林省小间距LED显示屏
  6. 使用3ds Max制作简单卧室
  7. windows U盘加密
  8. 奥运推迟,哪些黑科技将失之交臂
  9. python模块和类的通用转换规则(2),三步转oo
  10. 常见的软件测试内容及使用工具