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

本文围绕枚举的使用展开,指出在方法参数使用中存在的问题。通过具体代码示例,说明将方法参数定义为String类型而非枚举类型会带来诸多不便,如打日志时需转换、调用方法传参复杂等,最后给出将参数定义为枚举类型的正确重构方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

▄︻┻┳═一Agenda:

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

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

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

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

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

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

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


 

 

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

【先上代码】

先看如下方法:

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,这导致了两点不爽:

  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;
}

 

转载于:https://www.cnblogs.com/buguge/p/9564235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值