[英]creating generic enum wrapper for validations
免责声明:generics 不是很强大。
enum WeekDays {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}
enum Months {
JANUARY, FEBRAURY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}
enum Directions {
East, West, North, South, Up, Down
}
假设我有上面的枚举,并且有一个向我发送随机字符串的服务。
我需要验证目标字符串响应是否是有效的枚举值。
我正在考虑对以下行进行编码:
static <T> boolean isValidEnum(String value, T enumClass ){
try {
enumClass.valueOf(value);
return true;
} catch (Exception e) {
}
return false;
}
电话会是这样的:
isValidEnum("TUESDAY", WeekDays)
但是行enumClass.valueOf(value);
对我的 function 不满意。
任何指针表示赞赏! TIA
您可以将其重写为:
static <T extends Enum<T>> boolean isValidEnum(String value, Class<T> enumClass ){
try {
Enum.valueOf(enumClass, value);
return true;
} catch (Exception e) {
}
return false;
}
和
isValidEnum("TUESDAY", WeekDays.class)
您需要迭代枚举值并检查是否与传递的值匹配:
对于Java 8和更新版本:
static <T> boolean isValidEnum(String value, T enumClass ){
return Arrays.stream(((Class) enumClass).getEnumConstants())
.anyMatch(v -> v.toString().equals(value));
}
对于较旧的 Java版本:
static <T> boolean isValidEnum(String value, T enumClass ){
for (Object v : ((Class) enumClass).getEnumConstants()){
if (v.toString().equals(value)) return true;
}
return false;
}
有一个库,你也可以使用它,以防你不想实现它。
org.apache.commons.lang3的org.apache.commons.lang3
EnumUtils.isValidEnum(WeekDays.class, "TUESDAY")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.