なぜ私は、列挙型のオブジェクトクラスから.valuesを()得ることができませんか?

Albert451:

私は、列挙型は、値の名前を指定しているかどうかをチェックすることを、任意の列挙型オブジェクトに対して、普遍的な方法を作成したいのですが、とEnum型オブジェクト私は、メソッドを使用するunnableていますvalues();どうして?

値を取得する方法があるEnumタイプのオブジェクトは?

私は設定から値がための有効な文字列であるかどうかを確認するために、このような方法を必要とするmyEnum.valueOf(String);特定の文字列が間違っていることになるならば、それは例外がスローされますので、は(と私はそれを望んでいません)。

私は私の方法は次のようになりたいです:

public static Boolean enumContains(Enum en, String valueString){
    return toStringList(en.values()).contains(valueString.toUpperCase());
}

しかし、方法はありませんEnum.values()正しくこのメソッドを作成する方法?

ジェイコブG.:

Enum#valuesあなたが特定の列挙に合格しない場合を除き、あなたがコンパイル時にそれを使用することはできませんので、コンパイラによって生成される方法がありますEnum<?>

参照:https://stackoverflow.com/a/13659231/7294647

一つの解決策は、渡すことであろうClass<E extends Enum<E>>代わりに、使用しますClass#getEnumConstants

public static <E extends Enum<E>> Boolean enumContains(Class<E> clazz, String valueString){
    return toStringList(clazz.getEnumConstants()).contains(valueString.toUpperCase());
}

あなたが名前の列挙型を持っている場合MyEnum、あなたは簡単に渡すことができますMyEnum.class最初の引数として。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178907&siteId=1