2012-01-23 10 views
21

Chcę sprawdzić, czy wystąpienie java.lang.reflect.Type reprezentuje obiekt Emum, czy nie.Jak sprawdzić, czy java.lang.reflect.Type jest Enum

mogę sprawdzić, czy to wystąpienie określonej klasy przy użyciu == porównań np:

type == String.class // works 

ale to nie wydają się działać dla klasy ENUM:

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

.. To ma sens, ponieważ instancja byłaby konkretnym wyliczeniem, ale chciałbym sprawdzić, czy typ jest dla jakiegoś wyliczenia, czy też nie.

Może ktoś wyjaśnić mnie oczywiste, w jaki sposób stwierdzić, czy typ jest enum lub nie podobać

+3

co z Class.isEnum()? – aviad

+0

Używam obiektu typu, ponieważ obsługuje typy podstawowe. Chciałbym móc wywołać isEnum(), ale nie znajduje się on w obiekcie Type – Edd

+0

, który nie zrozumiał Twojego komentarza. Narzędzia klasy Typ. – aviad

Odpowiedz

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

Dzięki, wiedziałem, że to będzie coś oczywistego – Edd

7

Class.isEnum() zrobi to za Ciebie.

Patrz Oracle Doc

+0

Czy mógłbyś bardziej szczegółowo opisać, jak zaimplementować to – Edd

+0

, to z twojego przykładu zostanie przetłumaczone na 'type.isEnum()'. – towi

1

Dlaczego nie używacie .equals sposób porównać tego typu porównań. == jest najczęściej używany dla typów pierwotnych.

type.equals(Enum.class) 

A może będziesz potrzebował porównać swoje własne klasy.

type.equals(MyClass.class) 
+0

Metoda równości nie działa z Enum.class – Edd

+0

Myślę, że druga sugestia zadziała, ale potrzebuję jej do pracy z dowolnym wylicznikiem ... nie tylko te wyraźnie zdefiniowane – Edd

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

type.getClass() zwraca "klasę", a nie mój enum – Edd

+0

spróbuj rzucić na Class – aviad

+0

ah tak ... Obawiam się, że @jtahlborn już to zasugerował. Dzięki za twoje wysiłki. – Edd

Powiązane problemy