Java枚举的values() 查找时,如果传入无效的名称则会抛错。初学者不态注意的话就会直接try catch 返回 null来处理异常,我们知道异常不应该用于控制流。
try {
return Function.valueOf(name);
} catch (Exception ex) {
log.warn("Exception Thrown", ex);
return null;
}
这里分享一些不错的写法。
1. 我们项目里的写法。
public enum FunctionEnum{
System(1),
Pet(2),
Equipemnt(3);
private int id;
private static Map<Integer,FunctionEnum> idMapping;
static{
idMapping = new HashMap(FunctionEnum.values().length);
for(FunctionEnum enum:values()){
idMapping.put(enum.id(),enum);
}
}
FunctionEnum(int id){
this.id = id;
}
public int id(){
return this.id;
}
public static FunctionEnum of(int id){
return idMapping.get(id);
}
}
这样我们就可以进行更快速的查找,虽然稍微有些冗长。
如果 项目中有引用 Googel Guava的包,可以了解下 Enums包 的Enums.getIfPresent 方法
public static FunctionEnum getIfPresent(String name){
return Enums.getIfPresent(FunctioEnum.class,name).orNull;
}
根据 枚举名称查找枚举类型。如果没有则返回 null。