zoukankan      html  css  js  c++  java
  • (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了。

  • 相关阅读:
    存储过程
    sdsdsd
    sdsdd
    sdsd
    sdasd
    mysql触发
    c#连接mysql答题步骤
    c#mysql数据库
    nginx
    linux如何查看端口被何进程占用
  • 原文地址:https://www.cnblogs.com/buguge/p/9566165.html
Copyright © 2011-2022 走看看