Reflection API (VII) – Enumerados

Un enumerado es usado para definir tipos de datos que tienen cierto orden, pudiendo ser usados asignando un valor a cada uno de los elementos. Todos los enumerados extienden implícitamente de java.lang.Enum. Los enumerados contienen una o más constantes, que define una única instancia del tipo enumerado. Una definición de un enumerado es muy similar a una clase en el que puede tener campos, métodos y constructores (con algunas restricciones).

Puesto que los enumerados son clases, la reflexión no tiene necesidad de definir explícitamente una clase java.lang.reflect.Enum. En el Reflection API se definen los siguientes métodos para trabajar con tipos enumerados:

  • Class.isEnum(): indica si esta clase representa un tipo enumerado.
  • Class.getEnumConstants(): devuelve la lista de constantes definidas en el enumerado en orden en que fueron declaradas.
  • java.lang.reflect.Field.isEnumConstant(): indica si un atributo representa un elemento de tipo enumerado.

El resto de operaciones utilizadas en la reflexión son las mismas que para otras clases o miembros. Por ejemplo, las constantes de los enumerados son implementadas como atributos public static final.

<

p style=”text-align: justify;”>En ocasiones es necesario obtener dinámicamente la lista de constantes de un enumerado; sin no utilizamos reflexión esto se logra invocando el método static values(). Si la instancia del enumerado no esta disponible el único camino para obtener las constantes del enumerado es invocando al método invoke Class.getEnumConstants().

Este ejemplo muestra los valores devueltos por Class.getEnumConstants(), donde se puede comprobar que el resultado es idéntico a invocar el método values().