▄︻┻┳═一Agenda:html
▄︻┻┳═一(1/8)[代碼整潔之道]你真的會用枚舉嗎?非也!編程
▄︻┻┳═一(2/8)枚舉的錯誤用法 之 方法參數post
▄︻┻┳═一(3/8)枚舉的錯誤用法 之 方法參數(二)url
▄︻┻┳═一(4/8)枚舉的錯誤用法 之 方法返回值spa
▄︻┻┳═一(5/8)枚舉的錯誤用法 之 方法體內部code
▄︻┻┳═一(6/8)枚舉的錯誤用法 之 分支判斷htm
▄︻┻┳═一(7/8)藉助枚舉說一下數據類型定義規範blog
▄︻┻┳═一(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()); ... ... }