2012-01-23 45 views
21

Tôi muốn kiểm tra xem một cá thể java.lang.reflect.Type có đại diện cho một đối tượng Emum hay không.Cách kiểm tra xem java.lang.reflect.Type có phải là Enum

tôi có thể kiểm tra xem nó là một thể hiện của một lớp học cụ thể sử dụng == so sánh ví dụ:

type == String.class // works 

nhưng điều này dường như không làm việc cho lớp Enum:

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

.. Điều này có ý nghĩa như trường hợp sẽ là của một enum cụ thể nhưng tôi muốn kiểm tra xem loại là cho bất kỳ enum hay không.

một ai đó có thể giải thích rõ ràng với tôi làm thế nào để nói cho dù Type là một enum hay không hài lòng

+3

gì sai với Class.isEnum()? – aviad

+0

Tôi đang sử dụng đối tượng Kiểu vì nó hỗ trợ các kiểu nguyên thủy. Tôi muốn có thể gọi isEnum() nhưng nó không phải trên đối tượng Type – Edd

+0

không hiểu được bình luận của bạn. Lớp thực hiện Loại. – aviad

Trả lời

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

Cảm ơn, tôi biết nó sẽ là một cái gì đó hiển nhiên – Edd

7

Class.isEnum() sẽ làm điều đó cho bạn.

Tham khảo Oracle Doc

+0

bạn có thể cụ thể hơn không về cách thực hiện – Edd

+0

này nó sẽ dịch thành 'type.isEnum()' từ ví dụ của bạn. – towi

1

Tại sao bạn không sử dụng Equals phương pháp để so sánh kiểu này so sánh. == chủ yếu được sử dụng cho các kiểu nguyên thủy.

type.equals(Enum.class) 

hoặc có thể bạn sẽ cần so sánh các lớp học của riêng bạn.

type.equals(MyClass.class) 
+0

equals phương pháp dường như không làm việc với Enum.class – Edd

+0

Tôi nghĩ rằng bạn đề nghị thứ hai sẽ làm việc nhưng tôi cần nó để làm việc với bất kỳ enum ... không chỉ những người được xác định rõ ràng – Edd

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

type.getClass() trả về 'lớp' và không enum của tôi – Edd

+0

thử truyền tới Lớp – aviad

+0

ah vâng ... Tôi sợ @jtahlborn đã đề xuất điều này rồi. Cảm ơn những nỗ lực của bạn mặc dù – Edd

Các vấn đề liên quan