由於Enum.valueOf匹配不到枚舉時會出現異常,這個可以用try...catch來解決,但是這樣會導致代碼往臃腫的道路上越走越遠。
本文與其說是解決Enum.valueOf找不到枚舉出現的異常還不如說是換了解決方案:
現在有這么一個枚舉
/**
* 類型操作接口
*/
public interface TypeEnum {
Boolean ret(); // 表示是某個類型時返回結果
}
public enum ImageEnumImpl implements TypeEnum {
/**
* jpeg類型的圖片
*/
JPEG {
@Override
public Boolean ret() {
return true;
}
},
/**
* jpg類型的圖片
*/
JPG {
@Override
public Boolean ret() {
return true;
}
},
/**
* gif類型的圖片
*/
GIF {
@Override
public Boolean ret() {
return true;
}
},
/**
* bmp類型的圖片
*/
BMP {
@Override
public Boolean ret() {
return true;
}
},
/**
* png類型的圖片
*/
PNG {
@Override
public Boolean ret() {
return true;
}
},
}
服務端需要通過枚舉來判斷支持上傳的文件類型,可以使用Enum.valueOf來判斷,而且很香
if (ImageEnumImpl.valueOf(exhibitionName).ret()){}
但是如果枚舉類中並不存在這個類型就會拋出一個異常,導致無法用if的方式來判斷,可以使用以下代碼來操作,當枚舉不存在時返回null
private ImageEnumImpl getIfPresent(String name) {
return Enums.getIfPresent(ImageEnumImpl.class, name).orNull();
}
使用這個方法,這樣代碼就好看多了
if (getIfPresent(exhibitionName) == null) {
return AjaxResult.error(400, "請上傳正確的圖片文件,如:jpg、png、bmp、gif!");
}
