使用Enum类处理代码中的枚举

《Effective Java 》对使用枚举代替常量的做法推崇备至,专门拿出一篇文章分析使用枚举类的好处,我在实际使用中感受到Enum类的好处可以总结为如下几点:

  • 代码简洁,不易和同名类型混淆 ,避免用错

  • 符合单一职责。以前将很多的类型都放到一个常量类,不易维护,不符合单一职责。使用枚举类可以将不同字段的枚举分开,避免拓展导致错误

  • 容易当字段类型扩展了,但是数据库的COMMENT和实体类的注解不一致且当事人恰好也忘记了正确含义时,如果没有这个字段没有使用枚举类,那就需要撸代码挨个找到使用此字段的所有含义,耗时耗力还胆战心惊。但是使用类枚举类的话只要找到对应枚举类即可

    创建枚举类(类命名格式:实体名+字段名+Enum)

    public enum BillStatusEnum {
        NEW(10, "新建"),
        AWAIT_BILL(20, "待结算"),
        FINISH_BILL(30, "已完成");
    
        private Integer value;
        private String text;
        BillStatusEnum(Integer value, String text) {
            this.value = value;
            this.text = text;
        }
        public Integer getCode() {
            return this.value;
        }
        public String getMessage() {
            return this.text;
        }
        public static BillStatusEnum getEnum(Integer code) {
            if (code == null) {
                return null;
            }
            for (BillStatusEnum value : values()) {
                if (value.getCode().equals(code)) {
                    return value;
                }
            }
            return null;
        }
    
    }

    枚举类使用场景1:用作比较、赋值
     

     //获取枚举值用做对比、赋值
    int billStatus = 20 ;
    if(BillStatusEnum.AWAIT_BILL.getCode().equals(billStatus)){
         System.out.println("订单状态为"+BillStatusEnum.AWAIT_BILL.getMessage()+",开始处理订单业务。。。");
    }

    枚举类使用场景2:处理switch case

    int billStatus = 20 ;
    //处理多条件判断
    BillStatusEnum billStatusEnum = BillStatusEnum.getEnum(billStatus);
            switch (billStatusEnum) {
                case NEW:
                    System.out.println("订单状态为待" + BillStatusEnum.NEW.getMessage() + ",开始处理订单业务。。。");
                    break;
                case AWAIT_BILL:
                    System.out.println("订单状态为待" + BillStatusEnum.AWAIT_BILL.getMessage() + ",开始处理订单业务。。。");
                    break;
                case FINISH_BILL:
                    System.out.println("订单状态为待" + BillStatusEnum.FINISH_BILL.getMessage() + ",开始处理订单业务。。。");
                    break;
                default:
                    System.out.println("订单状态错误");
                    break;
            }
发布了56 篇原创文章 · 获赞 67 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/leo187/article/details/103857580