Java 列舉查詢不丟擲異常的實現
阿新 • • 發佈:2018-11-26
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。