Java中enum的本质

在平时的开发中,经常需要用到枚举,其实枚举enum 定义了一个特殊的类,这个类继承自java.lang.Enum,不过这是由编译程序处理的,直接写一个类继承Enum类会被编译程序拒绝。
来看一段代码:

public enum Action{
    UP,RIGHT,DOWN,LEFT
}

在编译之后,会生成一个Action.class文件,反编译后,观察程序代码,就可以了解enum的本质内容:

public final class Action extends Enum{
    private Action(String s,int i){
        super(s,i);
    }
    public static final Action UP;
    public static final Action RIGHT;
    public static final Action DOWN;
    public static final Action LEFT;
    ...
    static{
        UP = new Action("UP",0);
        RIGHT = new Action("RIGHT",1);
        DOWN = new Action("DOWN",2);
        LEFT = new Action("LEFT",3);
    }
}

可以看到,enum定义的Action实际上是个类,而enum中列举的UP,RIGHT,DOWN,LEFT常数,实际上是public static final 类型的,且为Action实例,由于构造函数权限为private所以你无法通过new来直接实例化Action,只有Action类中才可以实例化。

你可能感兴趣的:(Java)