Enums ApacheCommonsEnumUtils.isValidEnum(EnumClass,stringValue)显示wierd行为
我有一个枚举,如下所示:Enums ApacheCommonsEnumUtils.isValidEnum(EnumClass,stringValue)显示wierd行为,enums,apache-commons-lang3,Enums,Apache Commons Lang3,我有一个枚举,如下所示: public enum EnumClass { ValOne("ValOne."), ValTwo("ValTwo."), valone("ValOne"), valtwo("ValTwo."), ValThree("ValThree"), ValFour("ValFour"), ValFive("ValFive"), ValSix("ValSix"); private String enumValue; private EnumClass(String value)
public enum EnumClass {
ValOne("ValOne."), ValTwo("ValTwo."), valone("ValOne"), valtwo("ValTwo."), ValThree("ValThree"), ValFour("ValFour"), ValFive("ValFive"), ValSix("ValSix");
private String enumValue;
private EnumClass(String value) {
this.enumValue = value;
}
@Override
public String toString() {
return this.enumValue;
}}
我正在使用
org.apache.commons.lang3.EnumUtils..isValidEnum(EnumClass,
stringValue)
我使用的是枚举值,而不是枚举类的名称(例如:“ValTwo.”而不是枚举“ValTwo”)
当我检查给定字符串值是否等于枚举值时,它总是检查枚举对象的名称(即“ValTwo”),而不是Enum.toString。 我的印象是它检查值而不是枚举对象本身
奇怪的行为是,最初我测试代码时,它检查的是值而不是名称。但是,在重新构建应用程序后,它正在检查名称。没有进行可能会影响更改的代码更改
如有任何意见,将不胜感激
提前谢谢 我想我知道答案了。 我检查了EnumUtils.isValidEnum的源代码
public static <E extends Enum<E>> boolean isValidEnum(Class<E> enumClass, String enumName) {
if (enumName == null) {
return false;
}
try {
Enum.valueOf(enumClass, enumName);
return true;
} catch (IllegalArgumentException ex) {
return false;
}
}
public静态布尔值isValidEnum(类enumClass,字符串enumName){
if(enumName==null){
返回false;
}
试一试{
Enum.valueOf(enumClass,enumName);
返回true;
}捕获(IllegalArgumentException ex){
返回false;
}
}
看起来它检查的是枚举成员,而不是返回的值 这可能会帮助你
boolean isValid(Class enumClass, String value) {
return Arrays.stream(enumClass.getEnumConstants()).anyMatch((e) -> value.equals(
e.toString()));
}