枚举,在java中看似很小的一部分,却帮我们解决了很多大问题。
为什么使用枚举
我们知道生活中的很多地方都可以使用枚举,但是很多人在实际编程的时候却很少使用枚举类型,是因为枚举类型不好用吗?我认为不是的,而是他们并不了解枚举。这也是我之前的状态。
不使用枚举,对status(状态)等一些数目有限的对象,我们通常会使用静态常量的形式来表示,比如下面这样:
public class Test() {
private static final int CHECK_APPOINTMENT = 1; // 预约中
private static final int CHECK_PENDING_FEEDBACK = 2; // 待反馈
private static final int CHECK_FEEDBACK = 3; // 已反馈
private static final int CHECK_ADMISSIBLE = 4; // 已受理
private static final int CHECK_ALREADY_CHECKED = 5; // 已检定
private static final int CHECK_RESERVATION_FAILURE = 6; //预约失败
...
}
这时候,就会这么使用这些变量:
test.setStauts(Test.CHECK_APPOINTMENT);
好,这样按规矩来,没有任何问题,这样写的基础是建立在小组中的每个人都对项目有足够的了解,并且记忆力还不能太差了。但是就怕有些人不安规矩来:
test.setStatus(123);
完了,傻眼了。所以这就体现了枚举类型比静态常量更加的安全。
枚举类型
我们这里说的枚举类型是enum
类,和class
,interface
地位相同。
下面介绍几种简单的枚举类型的用法。
1.一般用法
还是上面的例子,我们将它换成是枚举类型。
public enum ProcessStatusCode {
CHECK_APPOINTMENT("预约中(待预约)", (short)1),
CHECK_PENDING_FEEDBACK("待反馈", (short)2),
CHECK_FEEDBACK("已反馈(待受理)", (short)3),
CHECK_ADMISSIBLE("已受理(待检定)", (short)4),
CHECK_ALREADY_CHECKED("已检定(检定完成)", (short)5),
CHECK_RESERVATION_FAILURE("预约失败", (short)6);
private Short code; // 代码
private String name; // 名称
processStatusCode(String name, Short code) {
this.name = name;
this.code = code;
}
}
首先,先定义枚举类型,需要说明的是,这里必须在开头就定义具体实例,然后才是定义变量,以及构造函数。
并且我们可以看到,在定义实例的时候,我们调用了构造函数,但是这是一种隐式
的调用。
调用的时候很简单:
ProcessStatusCode.CHECK_APPOINTMENT
2.switch中使用枚举
switch
语句使用枚举类型是再合适不过的了,这可以大大的增加代码的易读性。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED; // 初始化信号灯颜色
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
我们看到,在switch...case
语句使用枚举类型的时候,case
中的值直接使用枚举类型的具体实例,这点与上面的有一点不同。
3.枚举类型中定义函数
与类相同,我们也是可以在枚举中定义自己的函数的。
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
public void display() {
System.out.println("这是" + this.name + "色");
}
}
总结
我们说,什么是规范?规范就是一个团队写的代码像一个人写的一样。所以很多时候,虽然我们可以有很多的不同的方法去实现一个需求,但为什么我们经常能够听到说“这种写法更好”这样的话,就是为了让我们写出的代码更加容易理解,更加易读。
但是相反的,人们总是难免会有自己的想法,这样就不利于代码的一致性。而我们又需要这种一直性,所以就 有了想枚举类型这样的限制一些自己想法的东西出现了。
代码规范的出现,是因为有了合作的关系。现在的软件已经越来越多的是由团队进行编写,而不是一个人的工作,所以我们应该更加重视代码规范。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。