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";
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java枚举类型原理_Java枚举类接口实例原理解析相关推荐
- java枚举类型赋值_java枚举类型(转载)
public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...
- java 枚举类型初始化_java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enumColorSelect { RED_BAGE= 0, GREEN_BAGE, BL ...
- Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)
01: Java–枚举类型(枚举类型介绍 & 定义枚举类型 & 枚举类型的使用 & 枚举类型的注意事项 & 遍历枚举项) 02: Java–枚举类型(枚举类型实现接口 ...
- c枚举类型enum例题_c枚举类型enum用法 枚举类型enum用法 怎么去取所有
JUDGE(S W ) 指 W 属于 S 枚举类型还是自定义函数里的2个变量不要太久太久不联系我,我怕我一不小心把你忘了. (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素 ...
- java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- java实体类中有枚举类型_当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?...
当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...
- java枚举变量带括号_java枚举类型 - 墨梅的个人空间 - OSCHINA - 中文开源技术交流社区...
public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...
- java枚举类型定义_java中的枚举类型怎么定义?
展开全部 Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自62616964757a686964616fe59b9ee7ad9431333236366331己的变量, ...
- java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码
文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...
最新文章
- 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)
- charles使用说明(基于mac)
- Java 8中的默认方法(Defender方法)简介
- 分享:wkhtmltoimage开源工具的基本应用
- 朝花夕拾——finally/final/finalize拨云雾见青天
- linux依赖包在哪个目录,命令-Linux cmd在jar中搜索类文件,而与jar路径无关
- LeetCode 1248. 统计「优美子数组」(要复习)
- keras安装_代码详解:构建一个简单的Keras+深度学习REST API
- 【报告分享】2019全球住宅报告.pdf(附下载链接)
- linux 索引,Linux学习笔记-索引类命令
- 好消息:Dubbo Spring Boot要来了
- voip语音中转服务器,基于VoIP的语音应用服务器的设计与实现
- newifid1网页服务器,newifi d1刷老毛子固件测试
- A Neural Algorithm of Artistic Style : Neural Style Transfer with Eager Executon
- DW标签使用与javascript文档基础介绍
- 第一时间获取文章,可以关注本人公众号:月牙寂道长
- 按压式按摩靠背的设计
- Android R系统aidl文件怎么对应的java文件找不到了?
- Vue用图片制作Wifi动态图 制作小喇叭效果
- HTB_Responder 综合靶机 菜菜被虐现场实录