为了图快,很多人在编码过程中,常常使用硬编码(我们说的写死),尤其是一些新手,这是编程规范的大忌。因为别人接手或者自己后期维护的时候,常常脑壳疼。比如说用了数据字典,你若写死,就真的要命了。谁知道你写的一大堆1呀2呀之类的代表什么?若没有数据库设计说明文档,估计基本上只有写代码那个人自己才看得懂。
所以,为什么要使用枚举呢?我们先看这样一段代码:
public enum OrganizationCodeEnum {
BK("建设银行", "BK105"), RS("省医保", "539900"), YH("银海", "RS11"), YDJY("异地就医", "RS22"), FES("文件来源", "Fes");
private String name;
private String index;
private OrganizationCodeEnum(String name, String index) {
this.name = name;
this.index = index;
}
public static String getName(String index) {
for (OrganizationCodeEnum c : OrganizationCodeEnum.values()) {
if (c.getIndex().equals(index)) {
return c.name;
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIndex() {
return index;
}
public void setIndex(String index) {
this.index = index;
}
}
//文件状态
public enum StatusCodeEnum {
S1("接收成功", "1"), S2("审核成功", "2"), S3("签章失败", "3"), S4("签章并发送成功", "4"), S5("发送失败", "5");
private String name;
private String index;
private StatusCodeEnum(String name, String index) {
this.name = name;
this.index = index;
}
public static String getName(String index) {
for (StatusCodeEnum c : StatusCodeEnum.values()) {
if (c.getIndex().equals(index)) {
return c.name;
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIndex() {
return index;
}
public void setIndex(String index) {
this.index = index;
}
}
我们上述使用枚举来对数据状态、字典等字段进行描述(type、status等),方便后期维护和扩展,假若我们不使用枚举,那么很可能编码的时候,就会这样:orgName.setStatus("1");
如果没有注释,我们很难知道这"1"是什么?使用枚举:
orgName.setStatus(StatusCodeEnum.S1.getIndex());
// 或者
orgName.setStatus(StatusCodeEnum.getIndex("接收成功"));
使用枚举有什么好处?
1)防止传递参数错误
比如:orgName.setStatus("11");
实际上我们并没有定义"11"这个参数状态,但是程序编译时可以通过,可实际是有问题的,使用枚举,就能规避这样的问题。
2)去除equals两者判断
由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。
// 耗费性能
if("status".equals(variable)) {
...
}
// 使用枚举,提高性能
if(StatusCodeEnum.S1.getIndex() == variable) {
....
}
3)编译和修改优势(与常量类相比)
枚举类编译后默认final class,不允许继承。
常量类可被继承修改、增加字段等,易导致父类不兼容。
4)数据库兼容
枚举型可直接与数据库交互。
5)Switch语句优势
使用int、String类型switch时,当出现参数不确定的情况,偶尔会出现越界的现象(需做容错操作),使用枚举,编译期间限定类型,不允许发生越界。