博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(4/7)枚举的错误用法 之 方法返回值
阅读量:4982 次
发布时间:2019-06-12

本文共 3242 字,大约阅读时间需要 10 分钟。

▄︻┻┳═一Agenda:

▄︻┻┳═一

▄︻┻┳═一

▄︻┻┳═一

▄︻┻┳═一

▄︻┻┳═一

▄︻┻┳═一

▄︻┻┳═一


 

 

继续讲枚举的使用。本文举例说明方法返回值使用枚举类型对程序可读性和可维护性的影响。

【先上代码】

如下代码逻辑比较简单:判断busTyp和crdTyp不同情况下的取值,来给字符串cnlTyp赋值,并最终返回这个字符串。

// PpdUtils.java/** * 获取通道类型 * * @param busTyp * @param crdTyp * @return */public static String getCnlTyp(String busTyp, String crdTyp) {    String cnlTyp = "";    BusTypEnum busTypDict = BusTypEnum.getByKey(busTyp);    switch (busTypDict) {        case B2C_CHARGE:        case B2C_CONSUME_COMPLETION:        case GWAY_CONSUME_COMPLETION:        case B2C_ENT_CONSUME_COMPLETION:        case B2C_ENT_REPAYMENT:        case PGW_GW_COMPLETION:        case CREDIT_PAY_COMPLETION:        case CREDIT_PAY_COMPLETION_REFUND:            cnlTyp = CnlTypEnum.B2C.getValue();            break;        case B2B_CHARGE:        case B2B_CHARGE_FOR_ENT:        case B2B_CHARGE_ORDER_ADDITIONAL:        case B2B_ENT_CONSUME_COMPLETION:        case B2B_ENT_REPAYMENT:        case PGW_B2B_COMPLETION:            cnlTyp = CnlTypEnum.B2B.getValue();            break;        case QPAY_CONSUME_COMPLETION:        case QUICK_CHARGE:        case PGW_QPAY_COMPLETION:            if (CardTypeEnum.CreditCard.equals(crdTyp)) {                cnlTyp = CnlTypEnum.CQP.getValue();            } else {                cnlTyp = CnlTypEnum.DQP.getValue();            }            break;        case OCP_CONSUME_COMPLETION:        case OCP_ENT_CONSUME_COMPLETION:        case OCP_ENT_REPAYMENT:        case OCP_REFUND:            cnlTyp = CnlTypEnum.OCP.getValue();            break;        default:            break;    }    return cnlTyp;}

 

【重构方式】

本文重点讨论的是方法的返回值。所以呢,对于上面的方法,我们撇开两个入参不说,其他代码不足也勿喷。

我们注意到,方法体里要返回的变量cnlTyp,在switch的每个分支里,给它的赋值都是CnlTypEnum项的value。

那么,显然,这个方法没必要返回字符串了,而应该直接返回CnlTypEnum。同样,方法内部的变量cnlTyp的类型重构为CnlTypEnum。

这样,相比于返回String,调用方能直观的知道返回值的具体类型及可取值范围,从而提高了可读性。 

重构后的代码为:

// PpdUtils.java/** * 获取通道类型 * * @param busTyp * @param crdTyp * @return */public static CnlTypEnum getCnlTyp(String busTyp, String crdTyp) {    CnlTypEnum cnlTyp = null;    BusTypEnum busTypDict = BusTypEnum.getByKey(busTyp);    switch (busTypDict) {        case B2C_CHARGE:        case B2C_CONSUME_COMPLETION:        case GWAY_CONSUME_COMPLETION:        case B2C_ENT_CONSUME_COMPLETION:        case B2C_ENT_REPAYMENT:        case PGW_GW_COMPLETION:        case CREDIT_PAY_COMPLETION:        case CREDIT_PAY_COMPLETION_REFUND:            cnlTyp = CnlTypEnum.B2C;            break;        case B2B_CHARGE:        case B2B_CHARGE_FOR_ENT:        case B2B_CHARGE_ORDER_ADDITIONAL:        case B2B_ENT_CONSUME_COMPLETION:        case B2B_ENT_REPAYMENT:        case PGW_B2B_COMPLETION:            cnlTyp = CnlTypEnum.B2B;            break;        case QPAY_CONSUME_COMPLETION:        case QUICK_CHARGE:        case PGW_QPAY_COMPLETION:            if (CardTypeEnum.CreditCard.equals(crdTyp)) {                cnlTyp = CnlTypEnum.CQP;            } else {                cnlTyp = CnlTypEnum.DQP;            }            break;        case OCP_CONSUME_COMPLETION:        case OCP_ENT_CONSUME_COMPLETION:        case OCP_ENT_REPAYMENT:        case OCP_REFUND:            cnlTyp = CnlTypEnum.OCP;            break;        default:            break;    }    return cnlTyp;}

 

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

你可能感兴趣的文章
数据库系统
查看>>
ASP.NET Core 基础知识(九)Configuration
查看>>
pickle使用
查看>>
将多个网页制作成一个CHM文件
查看>>
txt 文件改名为fasta,并编辑规格格式
查看>>
闭包 装饰器 - 总结
查看>>
中间件
查看>>
jQuery初识之选择器、样式操作和筛选器(模态框和菜单示例)
查看>>
::作用域运算符
查看>>
memcpy memmove区别和实现
查看>>
linux 下创建并动态加载.so 文件
查看>>
python--redis
查看>>
禁用input帐号密码的自动填充
查看>>
python的小技巧
查看>>
json数组转数组对象
查看>>
KMP算法详解 转帖
查看>>
Struts2+Hibernate+Spring+Webservice 项目从Tomcat到WebLogic遇到问题的解决方法
查看>>
C# 代理/委托 Delegate
查看>>
笨方法学python--参数,解包,变量
查看>>
android 加载本地图片与网络图片
查看>>