(7/8)借助枚举说一下数据类型定义规范
▄︻┻┳═一Agenda:
▄︻┻┳═一(1/8)[代码整洁之道]你真的会用枚举吗?非也!
▄︻┻┳═一(2/8)枚举的错误用法 之 方法参数
▄︻┻┳═一(3/8)枚举的错误用法 之 方法参数(二)
▄︻┻┳═一(4/8)枚举的错误用法 之 方法返回值
▄︻┻┳═一(5/8)枚举的错误用法 之 方法体内部
▄︻┻┳═一(6/8)枚举的错误用法 之 分支判断
▄︻┻┳═一(7/8)借助枚举说一下数据类型定义规范
▄︻┻┳═一(8/8)RPC方法的参数,能用枚举就请考虑枚举
Java是一种强类型语言。通俗说就是,在Java中存储的数据都是有类型的,而且必须在编译时就确定其类型。
编程规范里,也强调数据要有明确的数据类型。这样会让代码变得很清晰,而且会规避不必要的麻烦。
通常在没有特殊需要的情况下,时间就用Date类型、字符就用char、是/否就用bool、数字就用数值类型。每种数据类型都有其可存储的数据和限定的取值范围。不要什么都用Object,什么都用String,灵活自由往往会带来更多隐患。红灯亮了,你还想自由自在的穿过马路,也许红绿灯的倒计时就是生命的倒计时。
本系列的主题是讨论枚举的使用规范。那么,我们看下面代码截图,
上面截图中所调用的方法updateRpmOrderStatus有4个参数,类型都是String。这个方法的作用是变更订单的支付状态。4个参数分别是新的支付状态、订单支付日期、订单号、原支付状态。其中,订单支付日期和订单号是表的主键,唯一决定一条记录,原支付状态是为了乐观锁的控制。
/** * 更新订单状态 * @param createDate 订单创建日期 * @param orderNo 订单号 * @param status 需更新的下一个状态 * @param processStatus 当前状态 * @return */ public int updateRpmOrderStatus( String status, String createDate, String orderNo, String processStatus) { return rpmOrdMapper.updateRpmOrderStatus(status, createDate, orderNo, processStatus); }
上面截图里是调用该方法时的语句如下,因为开发时不小心搞错了传参的顺序而导致了BUG。
int update = rpmOrdService.updateRpmOrderStatus(reqBO.getCreDt(), reqBO.getOrderNo(), OrdStsEnum.D_CLOSED.getSts(), rpmOrder.getOrdSts());
参数类型是String,传的也是String,编译没问题,但是逻辑错了。
如果把第一个参数“新的支付状态”重(限)构(定)为枚举类型,就不会出现这样的BUG了。
重构后代码截图如下,注意我把status重命名为newStatus了。
相关文章
- 【Oracle】利用在线重定义的方式改变普通表为分区表
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
- OAM 深入解读:使用 OAM 定义与管理 Kubernetes 内置 Workload
- jsp学习--JavaBean定义和在Jsp中使用JavaBean
- golang切片slice详解:介绍、内存分析、定义、遍历、切片可以继续切片、切片可以动态增长、切片的拷贝及底层原理
- SAP Spartacus 数据类型定义汇总
- 一种Java Spring框架里将配置文件里定义的值注入到Java变量的简单办法
- C# 类定义中可以使用的访问修饰符的组合
- Java定义枚举
- JDBC 的定义及产品组件
- C++-11版本推荐使用using定义别名(替代typedef)
- c语言之定义变量的一种写法
- 【数字信号处理】周期序列 ( 周期序列定义 | 周期序列示例 )
- .Net——使用.net内置处理程序处理自己定义节点Demo
- 爬虫日记(45):Flask模板中的宏定义
- 静态内部类定义在类中,任何方法外,用static定义
- 定义,并且找不到可接受类型为“ASP._aspx”的第一个参数的扩展方法“”(是否缺少 using 指令或程序集引用?)
- Vector DBC属性定义规则
- 数据类型定义语句