该书籍PDF下载地址:http://download.csdn.net/download/muyeju/10001473
83.推荐使用枚举定义常量
枚举类名.values()方法:获得所有枚举项
ordinal():返回枚举常量的序数
valueOf():根据指定名称返回枚举变量
每个枚举项都是枚举的一个实例
在项目中推荐使用枚举常量代替接口常量和类常量
84.通过构造方法协助描述枚举项
例:
package jsontest; public enum NumEnum { SUCCESS("成功"), FAIL("失败") ; private String des ; NumEnum(String des){ this.des = des ; } public String getDes() { return des; } public void setDes(String des) { this.des = des; } }
85.小心switch带来的空值异常
当switch语句后面的参数是枚举类型,编译器会根据枚举的排序值进行匹配,所以当传过来的是null值,会报错
所以,switch后面的参数是枚举类型,应该进行空值判断
public static void test(NumEnum e){ if(e!=null){ switch(e){ case SUCCESS: System.out.println("----成功"); break ; case FAIL : System.out.println("------失败"); break ; } } }
86.枚举类型的switch,建议在default中增加AssertionError错误
因为枚举的所有项都在case中列出来了,所以default没什么用,但是当增加了一个枚举,而没有修改switch中的case,就可能导致某些东西没执行,所以建议在default中抛出一个AssertionError
87.使用枚举的valueOf前必须进行校验该枚举是否存在
如果使用枚举的valueOf,有该枚举就返回该枚举,没有该枚举就会抛异常,所以最好在调用valueOf方法前,先判断一下有没有该枚举值
public static boolean contains(String name){ NumEnum[] n = NumEnum.values() ; for (NumEnum numEnum : n) { if(numEnum.name().equals(name)){ return true ; } } return false ; }
88.用枚举实现工厂模式更简洁
89.枚举项的数量限制在64个以内