当前位置: 移动技术网 > IT编程>开发语言>Java > Java枚举类接口实例原理解析

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

2020年03月09日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网