Breve explicación
La interfaz Callable<V>
es similar a Runnable
, pero a diferencia de Runnable
, Callable
puede retornar un valor y lanzar excepciones. Su método funcional es call()
, que retorna un resultado de tipo V
.
Ejemplo 1: Versión completa del cuerpo de la función Lambda
Java
package org.example.tinajero;
import java.util.concurrent.Callable;
public class LambdaCallableExample {
public static void main(String[] args) {
/*
* 🛠️ Callable
* 💡 Puede recibir argumentos y retornar un valor.
*/
// Creamos un Callable que retorna un mensaje
Callable<String> returnMessage = () -> {
// Cuerpo completo: retorna un mensaje
return "¡Hola desde un Callable ejecutado!";
};
try {
// Llamamos al método call() y mostramos el resultado
System.out.println(returnMessage.call());
} catch (Exception e) {
e.printStackTrace();
}
// Creamos otro Callable que realiza un cálculo
Callable<Integer> calculateSum = () -> {
// Cuerpo completo: retorna la suma de 5 y 10
return 5 + 10;
};
try {
// Llamamos al método call() y mostramos el resultado
System.out.println("Suma: " + calculateSum.call());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ejemplo 2: Reducción de la expresión Lambda
Java
package org.example.tinajero;
import java.util.concurrent.Callable;
public class LambdaCallableExampleSimplified {
public static void main(String[] args) {
/*
* 🛠️ Callable
* 💡 Puede recibir argumentos y retornar un valor.
*/
// Versión simplificada del Callable que retorna un mensaje
Callable<String> returnMessage = () -> "¡Hola desde un Callable simplificado!";
try {
// Llamamos al método call() y mostramos el resultado
System.out.println(returnMessage.call());
} catch (Exception e) {
e.printStackTrace();
}
// Versión simplificada del Callable que realiza un cálculo
Callable<Integer> calculateSum = () -> 5 + 15;
try {
// Llamamos al método call() y mostramos el resultado
System.out.println("Suma: " + calculateSum.call());
} catch (Exception e) {
e.printStackTrace();
}
}
}