继续讲枚举的使用。本文举例说明方法返回值使用枚举类型对程序可读性和可维护性的影响。
【先上代码】
如下代码逻辑比较简单:判断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; }
【重构方式】
本文重点讨论的是方法的返回值。所以呢,对于上面的方法,我们撇开两个入参不说,其他代码不足也勿喷。
重构的方式,就是把返回值改为枚举类型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; }
继续阅读与本文标签相同的文章
上一篇 :
常用的十大 python 图像处理工具
下一篇 :
浅谈HashMap,探索JDK(集合框架)
-
大型网站技术架构演进路程
2026-05-18栏目: 教程
-
四川省内江市与阿里巴巴签署数字经济建设战略合作
2026-05-18栏目: 教程
-
2019云栖大会 | 超干货!这一场,一起玩转分布式数据库云上最佳实践
2026-05-18栏目: 教程
-
降低 80% 的读写响应延迟!我们测评了 etcd 3.4 新特性(内含读写发展史)
2026-05-18栏目: 教程
-
渗透测试对网站安全扫描与检测流程
2026-05-18栏目: 教程
