2012-01-23 21 views
21

java.lang.reflect.TypeインスタンスがEmumオブジェクトを表すかどうかをチェックしたいと思います。java.lang.reflect.TypeがEnumであるかどうかをチェックする方法

私はそれが==比較例使用して、特定のクラスのインスタンスだかどうかを確認することができます

type == String.class // works 

をしかし、これは列挙型クラスのために動作していないよう:

type == Enum.class // doesn't work 

..これはインスタンスが特定の列挙型になるため意味がありますが、その型が列挙型であるかどうかをチェックしたいと思います。

は、誰かが()あなたのためにそれを行います

+3

Class.isEnumで間違っているものを()? – aviad

+0

私はそれがプリミティブ型をサポートするので、タイプオブジェクトを使用しています。私はisEnum()を呼び出すことができるようにしたいと思いますが、それは型オブジェクトにありません – Edd

+0

あなたのコメントを理解できませんでした。クラスはTypeを実装します。 – aviad

答えて

30
if(type instanceof Class && ((Class<?>)type).isEnum()) 
+1

ありがとう、私はそれが明らかな何かを知っていた – Edd

7

Class.isEnumを喜ばタイプが列挙型であるかどうかを教えてくれたりしないようにする方法を私に明白なことを説明してもらえます。

は、あなたが比較のこのタイプを比較する.equalsメソッドを使用していないのはなぜOracle Doc

+0

あなたはもっと具体的にこれを実装する方法を教えてください – Edd

+0

あなたの例から 'type.isEnum()'に変換されます。 – towi

1

を参照してください。 ==主にプリミティブ型に使用されます。

type.equals(Enum.class) 

あなた自身のクラスを比較する必要があります。

type.equals(MyClass.class) 
+0

equalsメソッドはEnum.classで動作しないようです。 – Edd

+0

2番目の提案はうまくいくと思いますが、どの列挙型でも動作する必要があります... – Edd

0
if(type instanceof Class && (Class)type.getClass().isEnum()) {...} 
+0

type.getClass()は 'class'を返します。私のenum – Edd

+0

クラス – aviad

+0

ああはいにキャストしよう...私は恐れて@jtahlbornはすでにこれを示唆しています。あなたの努力に感謝しかし、 – Edd

関連する問題