为验证创建通用枚举包装器
creating generic enum wrapper for validations
免责声明:泛型不是很强大。
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);
行对我的功能不满意。
感谢任何指点! 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;
}
有一个库,如果你不想实现它,你也可以使用它。
EnumUtils 个 org.apache.commons.lang3
EnumUtils.isValidEnum(WeekDays.class, "TUESDAY")
免责声明:泛型不是很强大。
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);
行对我的功能不满意。
感谢任何指点! 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;
}
有一个库,如果你不想实现它,你也可以使用它。
EnumUtils 个 org.apache.commons.lang3
EnumUtils.isValidEnum(WeekDays.class, "TUESDAY")