为什么需要常量维护类?(解决魔法值)
在项目中未申明就直接使用,尤其是String类型;通俗说代码中用到的某些值如1,2,3等或判断的时候如if("A".equest/B==10)等,其中的值就是未声明;一般代码中是不允许的,在阿里巴巴规范里面的这种值称为魔法值;
为什么项目代码中不允许魔法值?
比如项目中的支付方式或者状态,1微信支付、2支付宝支付、3银联支付、4其它支付,开发者自己写的肯定知道其意思,但如果让另一个程序员来修改你的代码,这时在项目代码中直接给的值1,2,3,4,在代码和数据库表都无注释的情况下,你会看不懂每一个值的状态的意思;
总归到底,就需要把这些值抽出来成一个常量类或者枚举类之后,再其调用。
它的好处有两点:
1.常量类或者枚举类的常量或者枚举肯定需要写注释
2.再者它还有一个 好处就是,真需要修改值时,只需要在常量类或者枚举类中修改即可,就不需要无休止的一堆好找,如有一个String a=1,之前在代码中直接使用的是数值1,假如有几十个地方都用到了1呢,并且这时还需要全部地方修改1为22呢,就可以在抽取出来的常量类或者枚举类中统一改一处即可实现全部改,你就说巴不巴适(改一个地方实现全改)
比如以下常量类:(工作中凡是用到的值,抽出来成单独的常量类)
package cn.itsource.constants;
//常量维护
public class Constants {
//手机号正则表达式
public static final String CHINA_PHONE_REGEX = "^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$";
//编码
public static final String UTF_8 = "UTF-8";
//qq服务
public class Driver {
public static final int TYPE_DRIVER = 0;
public static final int TYPE_CUSTOMER = 1;
}
//远程调用
public class Remote {
//服务名
public static final String SERVICE_UAA = "qq-service-uaa";
public static final String PREFIX_LOGIN_REMOTE = "/login/remote";
}
}
如果项目代码还涉及了其它常量值,直接如上添加即可……
比如以下枚举类:(工作中凡是用到的值,抽出来成单独的枚举类)
package cn.itsource.constants;
//错误码封装
public enum ErrorCode {
OK(200, "成功"),
NO_PERMISSION(403, "没有访问权限"),
PARAM_ERROR(400, "参数校验异常"),
SERVICE_ERROR(500, "系统异常,我们正在殴打程序员"),
SERVICE_REQUEST_ERROR(501, "远程服务调用异常"),
PARAM_PHONE_ERROR(1000, "手机号错误"),
PARAM_CODE_ERROR(1002, "授权码无效"),
PARAM_PHONE_EXIST(1001, "账号已经存在")
;
//错误码
private int code;
//错误信息
private String message;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
如果项目代码还涉及了其它枚举值,直接如上添加即可……
上面的值状态(如200)是返回给前端的,前端就可以通过这个值状态去判断,不会把对应的值信息去判断,如"成功"来说其中万一如果多个一个空格呢,就判断不了,那值状态(如200),在其中多打一个空格是不影响的,字符串和数值不是一回事哈