当前位置:网站首页>(3/8)枚举的不当用法 之 方法参数(二)

(3/8)枚举的不当用法 之 方法参数(二)

2022-07-07 06:34:00 51CTO


 

 

继续讲枚举的使用。本文举例说明方法的参数不用枚举所带来的蹩脚之处。

【先上代码】

先看如下方法:

      
      
private boolean updRpmRtulProcc(RpmRtulDO rpmRtulDO, String rfdSts)
throws YGException {
logger.infoFmt("修改退款订单状态为失败[{}]", RefundStsEnum.getBySts(rfdSts).getDesc());
rpmRtulDO.setRfdSts(rfdSts);

... ...

return true;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

 

程序里对这个方法的调用:

      
      
if (!updRpmRtulProcc(rpmRtul, RefundStsEnum.RFD_CLEARING_PROC.getSts())) {
... ...
}
  • 1.
  • 2.
  • 3.

 

如下是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;
}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

 

【重构方式】

上面方法中的String变量rfdSts,在程序里有定义对应的枚举类型RefundStsEnum。

本例是典型的枚举使用不当。症结在于将方法参数rfdSts定义成了String,这导致了两点不爽:

  1. 该方法内部,如第一行,打日志时,先调用枚举RefundStsEnum的getBySts(),将rfdSts所存的RefundStsEnum的sts转换成枚举RefundStsEnum,然后,获取它的desc。
  2. 调用该方法传的参数是RefundStsEnum.getSts()

正确的实现方式是:将方法参数rfdSts定义为枚举类型RefundStsEnum,自然,就不存在以上的不爽了。这样会很清晰!

      
      
private boolean updRpmRtulProcc(RpmRtulDO rpmRtulDO, RefundStsEnum rfdSts)
throws YGException {
logger.infoFmt("修改退款订单状态为失败[{}]", rfdSts.getDesc());
rpmRtulDO.setRfdSts(rfdSts.getSts());

... ...

return true;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

 

原网站

版权声明
本文为[51CTO]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15708799/5449138