zoukankan      html  css  js  c++  java
  • (5/8)枚举的错误用法 之 方法体内部

    ▄︻┻┳═一Agenda:

    ▄︻┻┳═一(1/8)[代码整洁之道]你真的会用枚举吗?非也!

    ▄︻┻┳═一(2/8)枚举的错误用法 之 方法参数

    ▄︻┻┳═一(3/8)枚举的错误用法 之 方法参数(二)

    ▄︻┻┳═一(4/8)枚举的错误用法 之 方法返回值

    ▄︻┻┳═一(5/8)枚举的错误用法 之 方法体内部

    ▄︻┻┳═一(6/8)枚举的错误用法 之 分支判断

    ▄︻┻┳═一(7/8)借助枚举说一下数据类型定义规范

    ▄︻┻┳═一(8/8)RPC接口能用枚举就请考虑枚举


    继续讲枚举的使用。前文说的是方法参数和pojo属性定义成枚举类型的好处。本文讲在方法里使用枚举的妙处。

    【先上代码】

    private boolean riskCheck(RefundReqBO refundReq, RefundRspBO refundRsp, RpmOrdDO rpmOrd, RpmRtulDO rpmRtul, YGBizMessageContext ctx) throws YGException {
        Logger logger = YGLogger.getLogger();
        ... ...
    
        String busTyp = RRCBusTypEnum.USER_CONSUME_REFUND_REFUND.getValue();
        if(AcPayFlgEnum.NO_ACCOUNT_PAYMENT.getValue().equals(rpmOrd.getAcPayFlg())){
            busTyp = RRCBusTypEnum.GWAY_CONSUME_REFUND.getValue();
        }
    
        RealTimeRiskCheckReqBO riskReq = new RealTimeRiskCheckReqBO();
        riskReq.setTxCd(refundReq.getGda().getTxCd());
        ... ...
        /** 此处省略15行代码 **/
        ... ...
        riskReq.setBusTyp(busTyp);
        ... ...
    }

    本文要说的就是上面方法里busTyp变量的类型。

    注意上面方法里省略的15行代码 ,正是这么多行逻辑代码的存在,当我们滚屏时,会给我们理解下文里出现的busTyp带来麻烦:busTyp具体指?又会有哪些值? 用我的14寸的笔记本电脑截屏如下,可以直观地看到,一屏显示不全这个变量的定义和使用。

    【重构方式】

    在上面的方法体里,把busTyp定义为了String,由于代码行多,在下文看到这个变量后,因为是字符串,所以难免不知道它是会存哪些值。这时呢,我们只好再翻上面的代码查看它的定义和赋了哪些值。

    而如果把busTyp定义为RRCBusTypEnum,那么下文在用到的时候,就能直观的知道它的含义以及它的具体取值范围,从而提高了可读性。 

    BTW,不管存不存在那15行代码,把busTyp定义为RRCBusTypEnum,用的时候再取它对应的属性,这无疑是个好的编程习惯,因为代码整洁度高!

    重构后的代码为:

    private boolean riskCheck(RefundReqBO refundReq, RefundRspBO refundRsp, RpmOrdDO rpmOrd, RpmRtulDO rpmRtul, YGBizMessageContext ctx) throws YGException {
        Logger logger = YGLogger.getLogger();
        ... ...
    
        RRCBusTypEnum busTyp = RRCBusTypEnum.USER_CONSUME_REFUND_REFUND;
        if(AcPayFlgEnum.NO_ACCOUNT_PAYMENT.getValue().equals(rpmOrd.getAcPayFlg())){
            busTyp = RRCBusTypEnum.GWAY_CONSUME_REFUND;
        }
    
        RealTimeRiskCheckReqBO riskReq = new RealTimeRiskCheckReqBO();
        riskReq.setTxCd(refundReq.getGda().getTxCd());
        ... ...
        /** 此处省略15行代码 **/
        ... ...
        riskReq.setBusTyp(busTyp.getValue());
        ... ...
    }
  • 相关阅读:
    shell中的for循环
    tty相关
    udev规则
    find中perm参数
    日志级别的选择:Debug、Info、Warn、Error还是Fatal
    云计算、云存储、大数据
    JSON数据解析(python3.4)
    38、友盟统计
    37、iamgeview 图层叠加
    36、imageview的坑
  • 原文地址:https://www.cnblogs.com/buguge/p/9495006.html
Copyright © 2011-2022 走看看