▄︻┻┳═一Agenda:html
▄︻┻┳═一(1/8)[代碼整潔之道]你真的會用枚舉嗎?非也!post
▄︻┻┳═一(2/8)枚舉的錯誤用法 之 方法參數this
▄︻┻┳═一(3/8)枚舉的錯誤用法 之 方法參數(二)url
▄︻┻┳═一(4/8)枚舉的錯誤用法 之 方法返回值spa
▄︻┻┳═一(5/8)枚舉的錯誤用法 之 方法體內部日誌
▄︻┻┳═一(6/8)枚舉的錯誤用法 之 分支判斷code
▄︻┻┳═一(7/8)藉助枚舉說一下數據類型定義規範htm
▄︻┻┳═一(8/8)RPC接口能用枚舉就請考慮枚舉blog
繼續講枚舉的使用。本文舉例說明方法的參數不用枚舉所帶來的蹩腳之處。接口
先看以下方法:
private boolean updRpmRtulProcc(RpmRtulDO rpmRtulDO, String rfdSts) throws YGException { logger.infoFmt("修改退款訂單狀態爲失敗[{}]", RefundStsEnum.getBySts(rfdSts).getDesc()); rpmRtulDO.setRfdSts(rfdSts); ... ... return true; }
程序裏對這個方法的調用:
if (!updRpmRtulProcc(rpmRtul, RefundStsEnum.RFD_CLEARING_PROC.getSts())) { ... ... }
以下是RefundStsEnum枚舉類:
/** * 退款狀態枚舉 */ public enum RefundStsEnum { RFD_PROCESS("0","退款處理中"), RFD_SUCC("3","退款成功"), RFD_FAIL("4","退款失敗"), RFD_CANCEL("7","退款取消"), RFD_CLEARING_PROC("8","退款清結算處理中"), RFD_ACCOUNTING_PROC("9","退款記帳處理中"), REFUSE("R9", "審批拒絕"), RFD_APPROVAL("W3", "退款審批中"); private String sts; private String desc; RefundStsEnum(String sts, String desc) { this.sts = sts; this.desc = desc; } public String getSts() { return sts; } public String getDesc() { return desc; } public static RefundStsEnum getBySts(String sts) { for (RefundStsEnum type : values()) { if (type.getSts().equals(sts)) { return type; } } return null; } }
上面方法中的String變量rfdSts,在程序裏有定義對應的枚舉類型RefundStsEnum。
本例是典型的枚舉使用不當。癥結在於將方法參數rfdSts定義成了String,這致使了兩點不爽:
正確的實現方式是:將方法參數rfdSts定義爲枚舉類型RefundStsEnum,天然,就不存在以上的不爽了。這樣會很清晰!
private boolean updRpmRtulProcc(RpmRtulDO rpmRtulDO, RefundStsEnum rfdSts) throws YGException { logger.infoFmt("修改退款訂單狀態爲失敗[{}]", rfdSts.getDesc()); rpmRtulDO.setRfdSts(rfdSts.getSts()); ... ... return true; }