繼續講枚舉的使用。前文說的是方法參數和pojo屬性定義成枚舉類型的好處。本文講在方法里使用枚舉的妙處。 ...
▄︻┻┳═一Agenda:
▄︻┻┳═一[代碼整潔之道]你真的會用枚舉嗎?非也!(1/3)
▄︻┻┳═一枚舉的錯誤用法(2/3)
▄︻┻┳═一枚舉的錯誤用法(3/3)
繼續講枚舉的使用。前文說的是方法參數和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); ... ... }
代碼截圖如下,我的14寸的筆記本電腦,一屏顯示不全這個變數的定義和使用。
【重構方式】
在上面的方法體里,把busTyp定義為了String,由於代碼行多,在下文看到這個變數後,因為是字元串,所以難免不知道它是會存哪些值。這時呢,我們只好再翻上面的代碼查看它的定義和賦了哪些值。
而如果把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()); ... ... }