Java枚举类接口实例原理解析
这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
枚举类可以实现一个或多个接口。与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法。
如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自己的业务逻辑。
publicinterfaceIGradeHandler{
StringgetGrade(StringstudentName);
}
publicenumGradeHandlerEnumimplementsIGradeHandler{
//fivegradelevelsABCDE
A("90~100"){
@Override
publicStringgetGrade(StringstudentName){
returnstudentName+"Outstanding";
}
},
E("0~59"){
@Override
publicStringgetGrade(StringstudentName){
returnstudentName+"Fail";
}
};
privateStringscore;
GradeHandlerEnum(Stringscore){
this.score=score;
}
publicStringgetScore(){
returnthis.score;
}
publicstaticvoidmain(String[]args){
GradeHandlerEnuma=GradeHandlerEnum.A;
GradeHandlerEnume=GradeHandlerEnum.valueOf("E");
System.out.println(a.getGrade("Lucy"));
System.out.println(e.getGrade("Tom"));
}
}
为了方便测试,示例只定义了A和E两个等级,执行结果如下:
LucyOutstanding TomFail
反编译枚举类
在《Java枚举抽象方法实例解析》中介绍了枚举类型的简单使用,现在有必要来了解一下它的基本实现原理。实际上在使用关键字enum创建枚举类并编译后,编译器会生成一些相关的类,这些类继承了JavaAPI中的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文件如下:
importjava.io.PrintStream;
publicenumGradeHandlerEnumimplementsIGradeHandler{
//编译后生成两个class文件GradeHandlerEnum$1和GradeHandlerEnum$2
A("90~100"),E("0~59");
privateStringscore;
//私有构造函数
privateGradeHandlerEnum(StringparamString){
this.score=paramString;
}
publicStringgetScore(){
returnthis.score;
}
publicstaticvoidmain(String[]paramArrayOfString){
//实例化枚举实例,变量名由系统生成
GradeHandlerEnumlocalGradeHandlerEnum1=A;
GradeHandlerEnumlocalGradeHandlerEnum2=valueOf("E");
System.out.println(localGradeHandlerEnum1.getGrade("Lucy"));
System.out.println(localGradeHandlerEnum2.getGrade("Tom"));
}
}
//枚举值A对应的枚举类
enumGradeHandlerEnum$1{
GradeHandlerEnum$1(StringparamString1){
super(paramString,paramInt,paramString1,null);
}
publicStringgetGrade(StringparamString){
returnparamString+"Outstanding";
}
}
//枚举值B对应的枚举类
enumGradeHandlerEnum$2{
GradeHandlerEnum$2(StringparamString1){
super(paramString,paramInt,paramString1,null);
}
publicStringgetGrade(StringparamString){
returnparamString+"Fail";
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。