错误的枚举用法
Posted buguge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误的枚举用法相关的知识,希望对你有一定的参考价值。
【承上文】
先划重点:
如果把某域定义成了枚举,那么,正确使用枚举要注意如下几点:
- 除了对外交易的输入输出,程序内部涉及到该域的,一律用枚举类型。例如:方法参数、bo的属性。
- 接收到外来的数据后,在使用该域时,应先把该域转换成枚举类型。
接下来举例继续唠叨。
【错误的枚举用法】
如下方法:
public static String getMNBNotifyUrl(YGBizMessageContext bizCtx, String reqCode, String notifyTyp, boolean isBack, Logger logger) { StringBuffer sb = new StringBuffer(); sb.append(bizCtx.getPara("_MNB_NOTIFY_ADDR"));//cde syscfg.xml里http://192.168.40.222:9280/bkg/ sb.append(notifyTyp).append("/"); if (isBack) { sb.append("b"); } sb.append("notify").append("."); sb.append(reqCode); logger.infoFmt("获取回调地址[{}]", sb.toString()); return sb.toString(); }
调用:
String noticeUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay.getValue(), NotifyDataTypeEnum.FORM.getNotifyTyp(), true, logger);// String returnUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay.getValue(), NotifyDataTypeEnum.FORM.getNotifyTyp(), false, logger);//
【重构为】
方法改为:
public static String getMNBNotifyUrl(YGBizMessageContext bizCtx, MNBNotifyCodeEnum reqCode, NotifyDataTypeEnum notifyTyp, boolean isBack, Logger logger) { StringBuffer sb = new StringBuffer(); sb.append(bizCtx.getPara("_MNB_NOTIFY_ADDR"));//cde syscfg.xml里http://192.168.40.222:9280/bkg/ sb.append(notifyTyp.getNotifyTyp()).append("/"); if (isBack) { sb.append("b"); } sb.append("notify").append("."); sb.append(reqCode.getValue()); logger.infoFmt("获取回调地址[{}]", sb.toString()); return sb.toString(); }
调用:
String noticeUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay, NotifyDataTypeEnum.FORM, true, logger);// String returnUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay, NotifyDataTypeEnum.FORM, false, logger);//
【分析】
上面的getMNBNotifyUrl方法是一个Util方法,供工程里各module调用。其他module的开发人跟这个方法的开发人往往不是同一个人。
我们比较重构前后的可读性,看原来的方法,reqCode和notifyTyp是String,调用者并不清楚传什么值,只有看哪里调用了才能明白;如果找不到调用的代码,那么就只能去问定义这个方法的程序猿了。而重构后将这2个参数改为枚举,一目了然!
退一万步讲,即使调用者和定义者是同一个人,重构后的代码也比之前的要好,为什么?还是那3个字:可读性提高了。
以上是关于错误的枚举用法的主要内容,如果未能解决你的问题,请参考以下文章