2017-09-07 8 views
0

を示していますapacheのコモンズEnumUtils.isValidEnum(EnumClass、のstringValue)の下に与えられたとして、私は列挙型を持っている奇妙な行動

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の代わりに使用します。 私は、enumオブジェクト自体の代わりに値をチェックするという印象を受けました。
奇妙な振る舞いは、最初にコードをテストしたときに、名前よりも値がチェックされていたことです。しかし、アプリケーションを再構築した後、それは名前をチェックしていた。変更に影響を与えた可能性のあるコードの変更は行われませんでした。
入力があれば幸いです。
ありがとうございます!

答えて

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; 
    } 
} 
のソースコードをチェックします。!

関連する問題