Significado de lambda()->{} en Java
java-8 java-7 (4)
Estoy mirando la siguiente respuesta de desbordamiento de pila: Cómo cambiar el @Controlado programado de Spring en tiempo de ejecución
Y en el código hay la siguiente línea:
schedulerFuture = taskScheduler.schedule(() -> { }, this);
Me gustaría saber qué significa la lambda () -> {}
en ese código. Necesito escribirlo sin usar lambdas.
Es un Runnable
con una definición de run
vacía. La representación anónima de clase de esto sería:
new Runnable() {
@Override public void run() {
// could have done something here
}
}
La expresión Lamda es una función anónima que te permite pasar métodos como argumentos o simplemente, un mecanismo que te ayuda a eliminar una gran cantidad de código repetitivo. No tienen modificador de acceso (privado, público o protegido), ninguna declaración de tipo de devolución y ningún nombre.
Veamos este ejemplo.
(int a, int b) -> {return a > b}
En tu caso, puedes hacer algo como a continuación:
schedulerFuture = taskScheduler.schedule(new Runnable() {
@Override
public void run() {
// task details
}
}, this);
Las expresiones Lambda básicamente expresan instancias de interfaces funcionales. En cierto modo, la expresión Lambda será: (lambda operator params) -> {body}
() -> System.out.println ("Esto significa que la expresión Lambda no está tomando ningún parámetro");
(p) -> System.out.println ("Expresión Lambda con un parámetro:" + p);
Para las lambdas:
El lado izquierdo es argumentos, lo que tomas. Encerrados en ()
están todos los argumentos que toma esta función
->
indica que es una función que toma lo que está a la izquierda y lo pasa a la derecha para procesarlo
El lado derecho es el cuerpo, lo que hace la lambda. Encerrado en {}
está todo lo que hace esta función
Después de darse cuenta de eso, solo necesita saber que esa construcción pasa una instancia de clase coincidente (mire cuál es el tipo de argumento esperado en la llamada a schedule()
) con su único método que hace exactamente lo mismo que la expresión lambda que acabamos de ver. analizado.