首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

增高你的Java代码质量吧:使用valueof前必须进行校验

2013-09-13 
提高你的Java代码质量吧:使用valueof前必须进行校验一、分析 每个枚举都是java.lang.Enum的子类,都可以访问

提高你的Java代码质量吧:使用valueof前必须进行校验

一、分析 

每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode、name、valueOf等,其中valueOf方法会把一个String类型的名称转变成枚举项,也就是在枚举项中查找字面值和该参数相等的枚举项。 

我们来深入分析一下该valueOf方法的源代码: 

valudOf方法通过反射从枚举类的常量声明中查找,若找到就直接返回,若找不到则抛出无效参数异常。valueOf的本意是保护编码的枚举安全性,使其不产生空枚举对象,简化枚举操作,但是却又引入了一个我们无法避免的IllegalArgumentException异常。 

二、场景 

我们来看如下代码: 

summer无法转换Season枚举,根据上面的分析,就会抛出IllegalArgumentException异常,一旦抛出异常,后续的代码就不运行了!!! 

这与我们的习惯很不一致,例如我们从一个List中查找一个元素,即使不存在也不会报错,顶多返回indexOf方法返回-1。 

三、建议 

1.使用try-catch捕捉异常 

2.扩展枚举类 

由于Enum类定义的方法都是final类型的,所以不希望被覆写,我们可以通过增加一个contains方法来判断是否包含指定的枚举项,然后在继续转换,代码如下: 

enum Season{     Spring,Summer,Autumn,Winter;      //是否包含枚举项     public static boolean contains(String name){         //所有的枚举值         Season[] season = values();        //遍历查找        for(Season s : season){            if(s.name().equals(name)){                return true;            }        }         return false;     } } 


热点排行