Java枚举用法总结

Catalogue
  1. 1 常量
  2. 2 Switch
  3. 3 向枚举中添加新方法
  4. 4 覆盖枚举的方法
  5. 5 实现接口
  6. 6 使用接口组织枚举
  7. 参考资料

枚举是JDK1.5引入的新类型,可以说是一个小功能,但是它却给我们的程序开发带来了极大的便捷,本文就对它的用法做一个小结。

1 常量

在JDK 1.5之前,我们定义常量都是public final static ……,这种定义方式有一个很大的弊端就是代码紊乱,需要大量的注释。有了枚举类型,事情就好办了。比如我们要定义一组颜色常量,可以这样:

1
2
3
public enum Color{
WHITE,BLACK,RED
}

是不是很清晰了呢,除了会使代码结构清晰之外,枚举还提供了许多便捷的操作……

2 Switch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}
}
}

3 向枚举中添加新方法

枚举中可以自定义方法,但是必须保证先定义枚举的实例,并且在最后一个实例后面用分号结尾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}

补充
枚举有两个默认的方法,name()ordinal()方法。前者可以理解为是枚举实例的名称。后者理解为枚举的编号,从0递增。

4 覆盖枚举的方法

下面给出覆盖toString()方法的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}
//覆盖方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}

5 实现接口

所有枚举都自动继承自java.lang.Enum类。由于Java不支持多继承,所以我们不能将枚举类继承其它的类,但是枚举类可以实现多个接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public interface Behaviour {  
void print();
String getInfo();
}
public enum Color implements Behaviour{
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;
}
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}

6 使用接口组织枚举

有时候我们需要在一个文件中统一管理常量话,可以使用接口组织枚举。

1
2
3
4
5
6
7
8
public interface Food {  
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}

参考资料

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