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