Las nuevas funcionalidades de Groovy
lunes 24/09/2007
Graeme Rocher, autor de ExpandoMetaClass, nos habla en su blog sobre las nuevas funcionalidades de meta-programación introducidas en la Beta3.
Reflection++
En Groovy, todas las clases llevan asociada una "metaclase" que implementa el MOP (Meta Object Protocol), y es la que nos permite añadir funcionalidades en tiempo de ejecución a un objeto cualquiera, o interceptar las llamadas a métodos para insertar comportamiento.
Los nuevos métodos respondsTo y hasProperty nos permiten inspeccionar un objeto para saber si dispone de un método o propiedad particular, por ejemplo:
if (Clase.metaclass.respondsTo("metodo")) {
obj.metodo()
}
O también,
if (Clase.metaclass.hasProperty("nombre")){
println obj.nombre
}
Interceptar llamadas a artefactos que no existen
Los métodos methodMissing y propertyMissing nos permiten interceptar las llamadas fallidas a métodos y propiedades, respectivamente. Se trata de un mecanismo más eficiente que el que había en Groovy hasta ahora, que sólo permitía interceptar todas las llamadas (sin distinción).
Con este mecanismo podemos añadir métodos a cualquier clase de forma sencilla:
Clase.metaClass.methodMissing = { String nombre, args ->En este ejemplo capturamos la llamada a un método inexistente, lo creamos al vuelo, y lo invocamos. Este proceso sólo se ejecutará la primera vez que se produzca la llamada: las siguientes se harán directemente sobre el método que hemos añadido.
Clase.metaClass."$name" = { Object[] varArgs ->
"$name : ${varArgs.inspect()}"
}
delegate."$name"(args)
}












