简单总结下Java枚举的用法,因为发现有的工程师还是喜欢用的。

原理

枚举类中得枚举项都会被编译成static final T类型的对象作为枚举类的属性

java 枚举继承 枚举类继承_枚举类

接下来我们以实例的方式讲解枚举类的属性与方法

  • 由于枚举类已经继承了Enum类,所以不能继承其他的类。
  • 由于枚举类会被编译器处理为final类,所以不能被继承。
  • enum是一个关键字,使用enum定义的枚举类本质上就相对于一个类继承了Enum这个抽象类而已。所以说enum定义的枚举结构实际上就是一个多例类!
  • 枚举其实就是特殊的常量类,且构造方法被默认强制是私有。(阿里巴巴编程规范)

使用

public enum Weekday {
    SUN(0),MON(1),TUE(2);//通过构造函数指定属性值
    int valueT;
    Weekday(int v){
        valueT = v;
    }

    public static void main(String[] args) {
        for(Weekday w : Weekday.values()) {//values为所有的枚举项
            System.out.println(w.name());//名称,即枚举项的字符含义
            System.out.println(w.valueT);//自已定义的属性
            System.out.println(w.ordinal());//枚举项所处次序,从0开始
        }
    }
}

switch()参数可以使用enum

enum Signal {
    GREEN, YELLOW, RED
}

public class TrafficLight {
    Signal color = Signal.RED;

    public void change() {
        switch (color) {//参数是枚举类的话,底下可以直接case枚举项
        case RED:
            color = Signal.GREEN;
            break;
        case YELLOW:
            color = Signal.RED;
            break;
        case GREEN:
            color = Signal.YELLOW;
            break;
        }
    }
}

使用枚举实现线程安全的单例模式

public class User {
    //私有化构造函数
    private User(){ }
    //定义一个静态枚举类
    static enum SingletonEnum{
        //创建一个枚举对象,该对象天生为单例
        INSTANCE;
        private User user;
        //私有化枚举的构造函数
        private SingletonEnum(){
            user=new User();
        }
        public User getInstnce(){
            return user;
        }
    }
    //对外暴露一个获取User对象的静态方法
    public static User getInstance(){
        return SingletonEnum.INSTANCE.getInstnce();
    }
}