1. 程式人生 > >Java 列舉查詢不丟擲異常的實現

Java 列舉查詢不丟擲異常的實現

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。