web-dev-qa-db-ja.com

クラスがJava.lang.Enumかどうかを確認する

クラスが列挙型であるかどうかを確認しようとしていますが、何かが欠けていると思います:

if (test.MyEnum.class instanceof Enum<?>.class)
 obj = resultWrapper.getEnum(i, test.MyEnum.class);
else 
 obj = resultWrapper.getObject(i);

Enum.classが無効であるというエラーが表示されます。では、クラスが列挙型であるかどうかを確認するにはどうすればよいですか?私はそれを決定することは可能だと確信しています、私はそれを手に入れることができません。

ありがとう

61

正しい構文は次のとおりです。

_Enum.class.isAssignableFrom(test.MyEnum.class)
_

しかし、列挙型の場合、より便利な方法を次に示します。

_if (someObject.getClass().isEnum()))
_

更新:本文(たとえばメソッドをオーバーライドする)を持つ列挙型アイテムの場合、これは実際には機能しません。その場合、使用

_if (someObject instanceof Enum<?>)
_

参照:

115

Java 5つの新機能-enum(実際にはそれほど新しいものではありません)について話している場合、これが進むべき方法です:

if (obj.getClass().isEnum()) {

...
}

Enumがカスタムクラスの場合は、obj instanceof Enum

14
Roman