viernes, 13 de enero de 2012

Convertir int a enum en Java

Hoy me he estado peleando en java buscando la forma de convertir un entero que hay almacenado en la BD a un tipo enumerado que tengo definido en mi aplicación. En los métodos de serie no viene nada así que venga buscar, y mas buscar, y he dado con dos soluciones:

Primera solución:
En el caso de que la enumeración que tenemos almacenada empiece en 0, podremos usar esto:
MyEnum foo = MyEnum.values()[valorEnteroDeLaBD];
Las pegas de este sistema es que el coste de llamar a .values() es muy alto además de que estamos obligados a empezar la enumeración en 0.

Segunda solución y la mejor para mi:
Dentro del enum declaramos un Map statico y un metodo estatico que rellene el Map. Además deberemos crear un atributo valor para poder almacenar el valor enumerado que queramos. Esto quedaria asi:
import java.util.HashMap;
import java.util.Map;

public enum EstadoIncidencia {
 ABIERTO_POR_CLIENTE(1), RESPONDIDO(2), EN_PROCESO(3), CERRADO(4);

 private int value;
 private static final Map typesByValue = new HashMap();

 static {
  for (EstadoIncidencia type : EstadoIncidencia.values()) {
   typesByValue.put(type.value, type);
  }
 }

 private EstadoIncidencia(int value) {
  this.value = value;
 }

 public int getValue() {
  return value;
 }
 
 public static EstadoIncidencia forValue(int value) {
  return typesByValue.get(value);
 }
}
Esto lo he encontrado en StackOverflow: http://stackoverflow.com/questions/5292790/convert-integer-value-to-matching-java-enum
Espero os sea igual de util que a mi ;).

No hay comentarios:

Publicar un comentario