apache commons EnumUtils.isValidEnum(EnumClass,stringValue)显示了奇怪的行为

时间:2017-09-07 18:31:29

标签: enums apache-commons-lang3

我有一个Enum,如下所示:

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”)
当我检查给定的String值是否等于Enum值时,它总是检查枚举对象的名称(是“ValTwo”)而不是Enum.toString。 我的印象是它检查值而不是枚举对象本身。
奇怪的行为是,最初当我测试代码时,它检查了值而不是名称。但是,在重建应用程序后,它正在检查名称。没有进行代码更改,这可能会影响更改。
任何意见都将深受赞赏。
在此先感谢!!

2 个答案:

答案 0 :(得分:0)

我想我知道答案。 我检查了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;
    }
}

看起来它会检查枚举成员而不是返回的值。!

答案 1 :(得分:0)

这可能对您有帮助

qdialog.h:93:5: note: candidate: QDialog::QDialog(QDialogPrivate&, QWidget*, Qt::WindowFlags)