需求
在一些枚舉類調用中,我們需要對一些枚舉的屬性值做包含關係的判斷,看是否匹配。通過反射機制獲取對應方法,再獲取對應的枚舉屬性值。下面是示例實現。
代碼實現
工具類
@Slf4j
public class EnumOperateUtil {
/**
* 校驗枚舉,是否包含在枚舉屬性值中
*
* @param enumClass 枚舉class
* @param methodName 屬性值調用方法名稱
* @param value 目標屬性值
* @return
*/
public static boolean validInclude(Class enumClass, String methodName, String value) {
//獲取枚舉list
List enumList = EnumUtils.getEnumList(enumClass);
//循環處理
for (int i = 0; i < enumList.size(); i++) {
//獲取枚舉
Object en = enumList.get(i);
//獲取枚舉的class
Class<?> eClass = en.getClass();
try {
//反射獲取方法
Method method = eClass.getMethod(methodName);
//調用枚舉方法
Object invokeRes = method.invoke(en, null);
//獲取方法調用結果,即屬性值,判斷
if (invokeRes.toString().equals(value)) {
//相同返回true
return true;
}
} catch (Exception e) {
//異常處理
log.error("validInclude()失敗:錯誤信息:枚舉{}方法執行失敗!{}", methodName, e.getMessage());
}
}
//不同或異常則返回false
return false;
}
}
枚舉類
public enum ColourEnum {
RED(1, "紅色"),
YELLOW(2, "黃色"),
GREEN(3, "綠色");
private Integer code;
private String desc;
ColourEnmu(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
使用方法
Integer code = 4;
Boolean includeCheckFlag = EnumOperateUtil.validInclude(ColourEnum.class, "getCode", code);