Java 枚举优雅替代常量类,代码可读性大幅提升
我们在很多项目中习惯使用静态常量类存储固定标识比如订单状态、用户身份、审核结果通常写法如下java运行publicclassOrderConst{publicstaticfinalIntegerPAY_WAIT0;publicstaticfinalIntegerPAY_SUCCESS1;publicstaticfinalIntegerPAY_CANCEL2;}这种写法存在明显短板无法在校验参数时限定取值范围前端传入任意数字都不会编译报错只能手动 if 判断无法绑定状态对应的中文描述需要额外编写映射方法常量过于分散后续新增状态极易遗漏维护。枚举类天生适合这类固定有限集合的场景每一个枚举实例自带属性与方法强类型约束从编译层面规避非法参数。优化后枚举示例java运行publicenumOrderStatusEnum{PAY_WAIT(0,待支付),PAY_SUCCESS(1,已支付),PAY_CANCEL(2,已取消);privateIntegercode;privateStringdesc;// 构造器getter省略}还可以编写根据 code 反向匹配枚举的工具方法在接收前端参数时直接校验枚举是否存在不存在直接抛出参数错误省去大量 if-else 判断。在 Mybatis 持久层框架中也可以直接配置枚举自动映射数据库字段不用手动转换类型。从团队规范角度来说枚举用于固定有限枚举值常量类用于无数量上限的配置字符串如文件路径、接口地址二者各司其职。把项目里零散的状态常量统一改造为枚举能明显减少非法参数问题简化业务判断代码让后续接手项目的同事一眼看懂每个标识代表的业务含义是低成本高收益的代码优化手段。
