Algunas utilidades de clases de Groovy

De ChuWiki
Saltar a: navegación, buscar

Veamos algunas facilidades que tiene Groovy para una clase.

Constructores con atributos

No es necesario declarar constructores con atributos. Groovy los declara por nosotros. Si tenemos esta clase así definida

class AClass {
    int anInt
    String anString
    Date aDate
    def something
    double aDouble
}

Es perfectamente válido crear instancias de las siguientes formas

AClass a = new AClass()
AClass b = new AClass(anInt:2, aDate:new Date())

Es decir, podemos usar un constructor sin parámetros, o podemos poner parámetro estilo nombre:valor siendo el nombre uno de los atributos de la clase y valor, el valor que queremos darle. Podemos poner todos los atributos, o solo algunos, y al llevar nombre en el parámetro, podemos ponerlos en cualquier orden.

Setter y Getter

En esa misma clase tal cual podemos acceder a sus atributos por medio de setter y getter, aunque no los hayamos definido, o bien acceder, aparentemente, directamente a los atributos. Digo aparentemente porque el compilador por debajo hará los cambios para usar los setter y getter.

<ysntaxhighlight lang="groovy"> a.anInt = 3 println a.anInt

a.setAnInt(11) println a.getAnInt() </syntaxhighlight>

with

Si queremos acceder a varios de los atributos de la clase, en vez de poner el nombre de la clase cada vez, punto, el atributo, podemos usar with

AClass a = new AClass(anInt:2, aDate:new Date())

a.with {
   println anInt
   println anString
   println aDate
   println something
   println aDouble
}

Método toString()

Podemos crear un método toString de forma que en el String salgan los atributos y sus valores sin más que anotar la clase en su declaración

@ToString(includeNames = true, excludes = ['something','aDouble'])
class AClass {
    int anInt
    String anString
    Date aDate
    def something
    double aDouble
}

AClass a = new AClass(anInt:2, aDate:new Date())
println a           // Muestra el resultado de llamar a toString()

El código anterior muestra en pantalla el siguiente resultado

com.chuidiang.examples.AClass(anInt:2, anString:null, aDate:Sat Apr 08 13:05:51 CEST 2017)

Es decir, el nombre de la clase y entre paréntesis, el nombre de los atributos, con sus valores, excluyendo los atributos something y aDouble, tal cual hemos indicado en la anotación.

La anotación @ToString, por defecto muestra todos los atributos sin su nombre. Pero como hemos visto en el ejemplo, podemos configurarla diciendo que muestre los nombres de los atributos, cuales no queremos que muestre y otras posibles opciones, como si queremos que muestre el nombre del paquete, si queremos que muestre atributos de la clase padre, etc, etc.

Enlaces

En la documentación oficial de Groovy, Object Orientation