江左梅郎2017/01/19         
枚举类型是Java1.5的新特性,是指由一组固定的常量组成合法的类型。Java中由关键字enum来定义一个枚举类型。我们可以使用枚举来取代用public final static修饰的一批相关数据。如我们定义红绿灯的颜色:
public final static int RED = 1; public final static int GREEN = 2; public final static int YELLOW = 3;
当需要使用时,通过switch来获取值:
public static String getValue(int color) { StringBuffer result = new StringBuffer(); switch (color) { case RED: result.append("红灯"); break; case GREEN: result.append("绿灯"); break; case YELLOW: result.append("黄灯"); break; default: result.append("颜色有误"); break; } return result.toString(); }
调用方法时需要传入参数,但是却无法保证传入的数据是合法的。
例如:System.out.println(getValue(RED));//正常
System.out.println(getValue(6));//存在类型不安全问题,编译不报错,但是数据不合要求
若使用枚举方式来代替,修改一下设置的方式就可以比较容易的获取到值:
定义:
public enum Color { RED("红灯"), GREEN("绿灯"), YELLOW("黄灯"); private String value = ""; private Color(String value) { this.value = value; } public String getValue() { return value; } }
调用测试方法:
public static void test(Color c){
String val = c.getValue();
System.out.println(val);
}
test(Color.RED);
输出:红灯
如何传入的值不是Color中的枚举值,则编译时就不通过。
同时枚举还可以设置各种颜色的灯亮时对应的行动:
在枚举中添加行动的抽象方法,并在枚举实例中实现:
public enum Color { RED("红灯") { @Override public String action() { return "停"; } }, GREEN("绿灯") { @Override public String action() { return "行"; } }, YELLOW("黄灯") { @Override public String action() { return "等一等"; } }; private String value = ""; private Color(String value) { this.value = value; } public String getValue() { return value; } //行动的抽象方法 public abstract String action(); }
调用测试方法:
public static void test(Color c){ String val = c.getValue(); String action = c.action(); System.out.println(val); System.out.println(action); } test(Color.RED);
输出结果:红灯
停
综上所述,使用枚举可以传入参时进行规则校验,参数只能为Color中的三个枚举值,否则在编译阶段就不能通过,保证了程序类型的安全性。