2010-11-12 13 views
52

Estoy tratando de saber si una clase es una enumeración, pero creo que me falta algo:Comprobación de si una clase es java.lang.Enum

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

Me da un error que dice que Enum .class no es válido. Entonces, ¿cómo puedo verificar si una clase es un Enum? Estoy bastante seguro de que es posible determinar eso, simplemente no puedo obtenerlo.

Gracias

Respuesta

89

La sintaxis correcta sería:

Enum.class.isAssignableFrom(test.MyEnum.class) 

pero para enumeraciones, aquí es un método más conveniente:

if (someObject.getClass().isEnum())) 

Actualización: para los artículos de enumeración con un cuerpo (por ejemplo, que la anulación métodos), esto no funcionará realmente. En ese caso, utilice

if (someObject instanceof Enum<?>) 

Referencia:

+1

de 'isEnum()'. Devuelve falso si su clase es una clase anónima creada por uno de los valores enum que anulan un método. – Trejkaz

+0

@Trejkaz ¿Podrías dar más detalles sobre eso? No te estoy siguiendo exactamente –

+2

Si tienes métodos en tu enumeración, los valores individuales de la enumeración pueden anularlos. Si anula cualquiera de estos métodos, crea una clase anónima que es una subclase de la enumeración. isEnum() para esa clase devuelve falso. Por lo tanto, aunque EnumClass.class.isEnum() devuelve verdadero, EnumClass.SOME_VALUE.getClass(). IsEnum() puede devolver falso, por lo que debe tener cuidado de dónde obtiene la clase. Por ejemplo, si está escribiendo un método de utilidad para que otros lo llamen, usar isEnum() sería una mala idea y usar Enum.class.isAssignableFrom (clazz) sería más seguro. – Trejkaz

14

si estamos hablando acerca de Java 5 nueva característica - enum (que no es muy nuevo en realidad), entonces este es el camino a seguir:

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

... 
} 

Si Enum es la clase personalizada , luego solo verifique obj instanceof Enum.

+0

desgracia que no funciona para:. TimeUnit.SECONDS.getClass() isEnum() Cuidado con – aholub7x

Cuestiones relacionadas