Java中使用枚举(enum)还是常量?
定义表结构的时候经常会碰到一类字段:状态 ( status 或者 state ) 、类型 ( type ) ,而通常的做法一般是:
数据库 中定义 tinyint 类型。
比如:status tinyint(1) NOT NULL COMMENT ‘订单状态 1-待支付;2-待发货;3-待收货;4-已收货;5-已完结;’
Java 实体类 中定义 Short 类型。
比如:private Short status
然后项目中可能会充斥着下面这样的代码:
order.setStatus((short) 1);
if (order.getStatus() == 1) {
order.setStatus((short) 2);
}
if (order.getStatus() == 4) {
order.setStatusName("已收货");
}
这都是些什么魔鬼数字啊,没有注释根本没法看,如果手滑可能状态就设错了,而且不好排查是在哪处赋值的。
改进方案是用 常量 ,但是又会产生另一种效果:
public static final Short WAIT_PAY = 1;
if (WAIT_PAY.equals(order.getStatus())) {
// 混用了解下
order.setStatus((short) 2);
}
定义常量对使用者没有约束力,仍然可能会被程序员无视,而直接使用数字。
我们在实体类(DO/DTO/BO/VO/PO)和方法参数中,统一使用枚举类型的属性来保存有固定取值的字段。
要做到上面这一点,有下面三个地方要注意
- 把接口的参数转化为枚举类型
- 把接口返回的枚举类型转为String
- 把枚举类型保存到数据库中
https://blog.csdn.net/xgw1010/article/details/108402444