枚举(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)) ; System.out.println(isRed(Color.RED)) ; } 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; } } }
|
自定义函数
由于枚举的理想使用场景是直接使用,应该避免使用有参构造函数、set方法等可以外部更新枚举值的操作,将属性定义为final,只提供get方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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; } }
|
使用
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()); } } }
|