一、枚举使用规则及注意事项

1、使用 enum 定义的枚举类默认继承 java.lang.Enum 抽象类,由于 java 是单继承的,所以枚举类不能再继承其它类

2、使用 enum 定义的枚举类默认使用 final 进行修饰,final 修饰的类不可以被继承

3、枚举类的构造器只能使用 private 权限修饰符

4、枚举类的所有实例必须在枚举类中显示列出,多个对象之间使用逗号(,)进行分隔,末尾使用分号(;)结尾

5、必须在枚举类的第一行声明枚举类实例

6、如果枚举类只有一个枚举对象,则可以作为一种单例模式的实现方式

 

二、自定义枚举的方式

1、使用 enum 关键字定义单个枚举类

public enum Novel {
    // 枚举类的实例必须写在枚举类的最前面
    HONG_LOU_MENG(1, "红楼梦"),
    XI_YOU_JI(2, "西游记"),
    SHUI_HU_ZHUAN(3, "水浒传"),
    SAN_GUO_YAN_YI(4, "三国演义");

    private Integer type;
    private String name;

    // 构造器默认使用 private 修饰,如果要显示的加上权限修饰符,那么只能使用 private 修饰
    private Novel(Integer type, String name) {
        this.type = type;
        this.name = name;
    }

    // 由于枚举类是常量,所以只有 get 方法,不建议定义 set 方法
    public Integer getType() {
        return type;
    }

    public String getName() {
        return name;
    }
}

2、使用 interface 定义多个枚举类  

public interface Books {
    enum Novel {
        HONG_LOU_MENG(1, "红楼梦"),
        XI_YOU_JI(2, "西游记"),
        SHUI_HU_ZHUAN(3, "水浒传"),
        SAN_GUO_YAN_YI(4, "三国演义");

        private Integer type;
        private String name;

        private Novel(Integer type, String name) {
            this.type = type;
            this.name = name;
        }

        public Integer getType() {
            return type;
        }

        public String getName() {
            return name;
        }
    }

    enum ProgramLanguage {
        PHP(1, "红楼梦"),
        JAVA(2, "西游记"),
        PYTHON(3, "水浒传"),
        JAVA_SCRIPT(4, "三国演义");

        private Integer category;
        private String name;

        ProgramLanguage(Integer category, String name) {
            this.category = category;
            this.name = name;
        }

        public Integer getCategory() {
            return category;
        }

        public String getName() {
            return name;
        }
    }
}