当前位置:  首页  >  PHP资讯  >  业界资讯

Java枚举类接口实例原理解析

这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了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"; } }

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

内容推荐:免费高清PNG素材下载
吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有 京ICP备19059560号-4