Java枚举类
枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。
枚举类和静态常量的对比
以一段代码为例:
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值,如果是枚举类型,就只能传入枚举类中包含的对象。
枚举的使用
定义枚举类
public enum Color {
RED, GREEN, BLANK, YELLOW
}
使用方式一
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 ;
}
}
使用方式二
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;
}
}
}
自定义函数
由于枚举的理想使用场景是直接使用,应该避免使用有参构造函数、set方法等可以外部更新枚举值的操作,将属性定义为final,只提供get方法。
public enum Color {
RED("红色", 1),
GREEN("绿色", 2),
YELLOW("黄色", 3);
private final String name;
private final int index;
public String getName() {
return name;
}
public int getIndex() {
return index;
}
}
使用
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());
}
}
}