转:https://blog.csdn.net/xxdw1992/article/details/107408498

 

1 定义枚举

  使用enum关键字来定义枚举

public enum ContractOperate_Enum implements BaseEnum {


    XIN_QIAN("2", "合同新签"),
    XIN_QIAN_ON_TESE("3", "试住合同上新签正式合同"),
    XU_QIAN("4", "合同续签"),
    HU_LI_DENG_JI_BIAN_GENG("5","护理等级变更"),
    HUAN_FANG("6","换房"),
    TIAN_JIA_RU_ZHU_REN("7","添加入住人"),
    YI_CHU_RU_ZHU_REN("8","移除入住人"),
    RU_ZHU_FAN_SHI_BIAN_GENG("9","入住方式变更"),
    JIE_SU("10", "合同结束");



    private String code;

    private String desc;

    private ContractOperate_Enum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static ContractOperate_Enum getByCode(String code) {
        if (TxtUtil.isEmpty(code))
            return null;
        ContractOperate_Enum[] allEnums = ContractOperate_Enum.values();
        for (ContractOperate_Enum thisEnum : allEnums) {
            if (thisEnum.code.equals(code)) {
                return thisEnum;
            }
        }
        return null;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}

  注意,定义枚举类的关键字是enum,而不是Enum,所有关键字都是小写的!
  其中XIN_QIAN、XIN_QIAN_ON_TESE等9个都是枚举项,它们都是本类的实例,本类一共就只有9个实例对象。

  在定义枚举项时,多个枚举项之间使用逗号分隔,最后一个枚举项后需要给出分号!但如果枚举类中只有枚举项(没有构造器、方法、实例变量),那么可以省略分号!建议不要省略分号!
      不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以在类外只能使用类名.枚举项

2  所有枚举类都是Enum的子类

 

3 枚举类的构造器

  枚举类也可以有构造器,构造器默认都是private修饰,而且只能是private。因为枚举类的实例不能让外界来创建

4 枚举类可以有成员

  其实枚举类和正常的类一样,可以有实例变量,实例方法,静态方法等等,只不过它的实例个数是有限的,在定义枚举的时候就已经定好有几个实例了

 

5 枚举类中还可以有抽象方法

  还可以在枚举类中给出抽象方法,然后在创建每个枚举项时使用“特殊”的语法来重复抽象方法。

enum Direction {
    FRONT() {
        public void fun() {
            System.out.println("FROND:重写了fun()方法");
        }
    }, 
    BEHIND() {
        public void fun() {
            System.out.println("BEHIND:重写了fun()方法");
        }
    }, 
    LEFT() {
        public void fun() {
            System.out.println("LEFT:重写了fun()方法");
        }
    },
    RIGHT() {
        public void fun() {
            System.out.println("RIGHT:重写了fun()方法");
        }
    };
    
    public abstract void fun()[只需要把fun()方法修改为抽象方法,但不可以把Direction类声明为抽象类。];
}

 

 

6 每个枚举类都有两个特殊方法