
Java Lambdas
Hola a todos y bienvenidos a un nuevo artículo del blog. Hoy vamos a hablar de Java Lambdas, que son una novedad (bueno en Java 8, ejem) para abreviar nuestro código.
Índice de contenidos
Clases anónimas
¿No iba de Lambdas esto? Pues sí… Precisamente una expresión lambda es «casi» la abreviatura de una clase anónima. Seguramente te suena este código
El fragmento marcado en rojo representa una clase anónima. Como tal, necesita que implementemos la interfaz “ActionListener”, con todo el código que eso implica. Abrir y cerrar la clase con las llaves, definir la función con sus parámetros, definir el tipo de dato de cada parámetro (en este caso solo 1, ActionEvent)
Vamos, que para un simple mensaje “has hecho click” necesitamos 6 o 7 líneas de código, con varias llaves entre medio y el correspondiente lío. Imagínate si hay 5 botones, el código se multiplica.
Por cierto, el editor utilizado es Eclipse. Puedes descargarlo aquí.
Lambdas
¿Cómo «actualizamos» una clase anónima para que sea un Lambda? Así:
Si comparamos este código con la clase anónima anterior, ha desaparecido casi todo. Sólo queda esto:
Así que éste fragmento:
(e)
reemplaza a
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
¿No está mal, verdad? Aquí Java “deduce” todo lo que falta, es decir el tipo de clase (ActionListener), el nombre de la función (actionPerformed), el tipo del parámetro que recibe (ActionEvent) y se queda sólo con el nombre del parámetro (en este caso, e)
Y lo puede deducir, porque sabe que addActionListener NECESITA RECIBIR un ActionListener.
Como ActionListener sólo define una función, también sabe que queremos implementar actionPerformed. Y sabiendo eso, también sabe que el parámetro que pasemos a actionPerformed es de tipo ActionEvent.
Es decir que toda esa información “repetida” que estamos pasando al crear una clase anónima, desaparece al escribir un lambda.

cortesía de makeameme.org
¿Cuándo usar cada uno?
De entrada es preferible usar Lambdas. Ya sabes: “Lo bueno si breve, 2 veces bueno”
En cambio, si debes implementar 2 o más funciones abstractas, no podrás usarlos.
¿Porqué no puedo usar Java Lambdas para implementar varias funciones?
Porque al no especificar en el lambda el nombre de la función que usas, Java no sabría a cuál te refieres. Por eso están limitados a interfaces con 1 sola función.

Expresión Lambda cuando debe implementar 2 funciones
En este caso vienen al rescate las clases anónimas, que no tienen esta limitación. Puedes implementar tantas funciones como quieras, e incluso usar clases abstractas en lugar de Interfaces.
Como ves el contenido es un poco espeso, pero en siguientes artículos profundizaremos en el tema y veremos otras aplicaciones interesantes de las Java Lambdas.
Hasta el próximo artículo 😉