Tipo de Datos Enum en Grails

En mi afán por mejorar la aplicación que estoy desarrollando en Grails he querido convertir todos los catálogos a tipo Enum (cosa que me parecio buena idea). Al principio se vislumbraba fácil la tarea, pero he quedado enfrascado dando vueltas sobre un error que me esta saliendo al momento de crear “una clase de tipo Enum”.

Bueno, comencé creando una clase de tipo Enum como se muestra a continuación:

enum Catalogo {
  CATALOGO1(new Integer(1), "CATALOGO1")
  CATALOGO2(new Integer(2), "CATALOGO2"])
 
  Integer id
  String nombre
 
  Catalogo(id,nombre){
    this.id = id
    this.nombre = nombre
  }
 
  String toString(){
     nombre
  }
 
}

Pero después me di cuenta, que grails no trata igual a las tipos Class que a los tipos Enum (al menos en la versión 1.3.6). Cuando lo intente implementar, tuve que implementar manualmente los métodos que grails automáticamente genera en las tipos Class y que no genera en los tipos Enum. Por ejemplo tuve que implementar el método list(), el método get() y me quede estancado ya que me esta pidiendo un metodo Catalogo.#<init>

Tal vez se preguntaran cuál es mi afan de cambiar los catalogos del tipo Class al tipo Enum. Bueno, mi respuesta es que muchas veces en mi codigo tengo que hacer referencia o comparación con los nombres. Por ejemplo, me pasa mucho con los tipos de direcciones. Tengo un catalogo con la siguiente información:

1-Fiscal

2-Comercial

3-Almacen

Y después quiero hacer método que busque las direcciones donde el tipo de dirección es “Fiscal”. En vez de crear una variable estática o de pasarle un 1 o pasarle la cadena “Fiscal” (que puede ser propensa a errores de escritura), le paso TipoDireccion.FISCAL y me evito de malas interpretaciones e incluso de problemas si alguien ajeno al código lo quiera entender.

En fin, voy a seguir con mi travesía en el intento de implementar un tipo Enum y ya les estaré contando que es lo que me paso.

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook0