Oracle publica una primera versión de las closures
Hacia el final de la semana pasada a Oracle ha publicado una primera versión de la implementación de closures que formará parte de Java 7. Aquí tenéis algunos ejemplos de su sintaxis:
int i1 = #()(3).(); //i1 = 3
Integer i2 = #()(3).(); //i2 = 3
int i3 = #(int x)( x + 1 ).(3); //i3 = 4
int i4 = #(Number x)(x.intValue()).(new Float(3.0f)); //i4 = 3
La # se emplea para definir las closures. El primer paréntesis que va después de la # define los parámetros que toma la closures (ninguno en los dos primeros ejemplos, un int y un Number en el tercer y cuarto ejemplo). Después de ese primer paréntesis, obligatorio aunque no haya parámetros (esto yo creo que sólo deberían haber ahorrado...) también entre paréntesis va el código de la closure. En los ejemplos, el ".()" final ejecuta la closures.
Por lo que he leído en este blog, hay una segunda sintaxis para definir las closures un poco más al estilo "Java" donde el cuerpo de la closures va entre {} y que requiere el uso de la sentencia return:
int i1 = #(){ return 3; }.(); //i1 = 3
Integer i2 = #(){ return 3; }.(); //i2 = 3
int i3 = #(int x){ return x + 1; }.(3); //i3 = 4
int i4 = #(Number x){ return x.intValue(); }.(new Float(3.0f));
¿Qué os parece esta sintaxis para las closures?
Reader Comments