Java枚举类

枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。

枚举类和静态常量的对比

以一段代码为例:

1
2
3
4
public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FALL = 3;
public static final int SEASON_WINTER = 4;

使用常量会有缺陷:类型不安全。如果一个方法要求传入季节参数,开发者可以传入任意的int值,如果是枚举类型,就只能传入枚举类中包含的对象


枚举的使用

定义枚举类

1
2
3
public enum Color {
RED, GREEN, BLANK, YELLOW
}

使用方式一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Demo1 {
public static void main(String[] args) {
System.out.println(isRed(Color.BLANK)) ; //结果: false
System.out.println(isRed(Color.RED)) ; //结果: true
}


static boolean isRed(Color color){
if (Color.RED.equals(color)) {
return true ;
}
return false ;
}

}

使用方式二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 public class Demo2 {
public static void main(String[] args) {
showColor(Color.RED);
}

static void showColor(Color color){
switch (color) {
case BLANK:
System.out.println(color);
break;
case RED :
System.out.println(color);
break;
default:
System.out.println(color);
break;
}
}
}

自定义函数

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
public enum Color {
RED("红色", 1),
GREEN("绿色", 2),
YELLOW("黄色", 3);

private String name;
private int index;

Color(String name, int index) {
this.name = name;
this.index = index;
}

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;
}
}

使用

1
2
3
4
5
6
7
8
9
10
11
12
public class Demo {
public static void main(String[] args) {
//输出某一枚举的值
System.out.println(Color.RED.getName());
System.out.println(Color.RED.getIndex());

//遍历所有的枚举
for(Color color : Color.values()){
System.out.println(color + " name: " + color.getName() + " index: " + color.getIndex());
}
}
}