怎样解析Java枚举类接口实例原理
创始人
2024-12-24 20:04:56
0次

枚举类可以实现一个或多个接口。与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法。

如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自己的业务逻辑。

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 OutstandingTom Fail

反编译枚举类

现在有必要来了解一下它的基本实现原理。实际上在使用关键字enum创建枚举类并编译后,编译器会生成一些相关的类,这些类继承了Java API中的java.lang.Enum类,也就是说通过关键字enum创建的枚举类在编译后事实上也是一个类类型而且该类继承自java.lang.Enum类。

IGradeHandler.classGradeHandlerEnum.classGradeHandlerEnum$1.classGradeHandlerEnum$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"; }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...