Java编程中为什么使用枚举(Enum)(禁止硬编码)?

为了图快,很多人在编码过程中,常常使用硬编码(我们说的写死),尤其是一些新手,这是编程规范的大忌。因为别人接手或者自己后期维护的时候,常常脑壳疼。比如说用了数据字典,你若写死,就真的要命了。谁知道你写的一大堆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("接收成功"));

Java编程中为什么使用枚举(Enum)(禁止硬编码)?_第1张图片

使用枚举有什么好处?
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时,当出现参数不确定的情况,偶尔会出现越界的现象(需做容错操作),使用枚举,编译期间限定类型,不允许发生越界。
 

你可能感兴趣的:(基础)