欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java 中的枚举有太多未知的知识--枚举的底层实现

最编程 2024-04-22 11:10:20
...

上面我们已经说了,枚举是一个特殊的类,每一个枚举项本质上都是枚举类自身的实例。

因此,上面枚举类Direction可以通过下面代码进行示例:

final class Direction extends Enum{
    public final static Direction EAST = new Direction();
    public final static Direction WEST = new Direction();
    public final static Direction NORTH = new Direction();
    public final static Direction SOUTH = new Direction();
}

首先通过javac命令对Direction进行编译,然后通过javap命令来查看一下对应class文件内容:

bogon:enums apple$ javap Direction.class 
Compiled from "Direction.java"
public final class com.choupangxia.enums.Direction extends java.lang.Enum<com.choupangxia.enums.Direction> {
  public static final com.choupangxia.enums.Direction EAST;
  public static final com.choupangxia.enums.Direction WEST;
  public static final com.choupangxia.enums.Direction NORTH;
  public static final com.choupangxia.enums.Direction SOUTH;
  public static com.choupangxia.enums.Direction[] values();
  public static com.choupangxia.enums.Direction valueOf(java.lang.String);
  static {};
}

可以看到,一个枚举在经过编译器编译过后,变成了一个抽象类,它继承了java.lang.Enum;而枚举中定义的枚举常量,变成了相应的public static final属性,而且其类型就抽象类的类型,名字就是枚举常量的名字。