错误的枚举用法

【承上文】

承上文[代码整洁之道]你真的会用枚举吗?非也!

先划重点:

如果把某域定义成了枚举,那么,正确使用枚举要注意如下几点

  • 除了对外交易的输入输出,程序内部涉及到该域的,一律用枚举类型。例如:方法参数、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个字:可读性提高了。

原文地址:https://www.cnblogs.com/buguge/p/9487855.html

时间: 2024-08-10 22:12:09

错误的枚举用法的相关文章

android错误之MediaPlayer用法的Media Player called in state *

用到Media Player,遇到几个问题,记一下 用法就不说了,使用的时候最好参考一下mediaPlayer的这张图 第一个错误是Media Player called in state 8 这个是因为在调用start之前没有prepare,因为我是用了 mediaPlayer = MediaPlayer.create(context, R.raw.notice); 去初始化的播放器,这个接口说明 只要成功返回了播放器就不需要再去prepare了,但是我之后多次调用stop和start,就导致

android错误之MediaPlayer用法的Media Player called in state *,androidmediaplayer

用到Media Player,遇到几个问题,记一下 用法就不说了,使用的时候最好参考一下mediaPlayer的这张图 第一个错误是Media Player called in state 8 这个是因为在调用start之前没有prepare,因为我是用了 mediaPlayer = MediaPlayer.create(context, R.raw.notice); 去初始化的播放器,这个接口说明 只要成功返回了播放器就不需要再去prepare了,但是我之后多次调用stop和start,就导致

C语言中的errno(错误报告)用法

C语言标准库中的错误报告用法有三种形式. 1.errno errno在<errno.h>头文件中定义,如下 #ifndef errno extern int errno; #endif 外部变量errno保存库程序中实现定义的错误码,通常被定义为errno.h中以E开头的宏, 所有错误码都是正整数,如下例子 # define EDOM 33 /* Math argument out of domain of function. */ EDOM的意思是参数不在数学函数能接受的域中,稍后的例子中用

常见枚举用法

1.常量 把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. Java代码 public enum Color { RED, GREEN, BLANK, YELLOW } 2.switch 使用枚举,能让我们的代码可读性更强. Java代码 enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (

无法解析属性“mode”的值。错误为: 枚举值必须是以下各值中的一个: RemoteOnly, On, Off。

Off首字母要大写,注意大小写 <customErrors mode="Off">      <error statusCode="404" redirect="/Home/http404"/>    </customErrors>

js枚举用法

1 function enumType(i, j) { 2 return { 3 OFServiceType: ['长租业务', '短租业务', '班车业务', '其他业务'], 4 OFSettleType: ['内部', '现金', '月结', '挂账', '免费'], 5 OFGoBack: ['单程往', '单程返', '往返', '留宿'], 6 OfferType: ['人民币', '港币', '美元', '英镑', '欧罗', '其他'], 7 NeederSex: ['男', '

if常见错误及ifelse用法

问题一:if只能控制一个语句,除非加个大括号变成语句块 例子1: if(2>1) printf("aaa"); printf("bbb"); 结果会打印 aaabbb 例子2: if(2>1) { printf("aaa"); } printf("bbb"); 结果会打印aaa 问题二:if后面加分号(if后面不能加分号) 例子1: if(1>2); printf("aaa"); 结果会打

Java 枚举(enum) 详解7种常见的用法

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. Java代码 public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. Java代码 enum Signal { GREEN, YE

java 枚举常用操作

在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. Java代码 public enum Color { } JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. Java代码 enum Signal { } public class TrafficLight { public void change() {