Argumento nulo lambda de Java 8
Digamos que tengo la siguiente interfaz funcional en Java 8:
interface Action<T, U> {
U execute(T t);
}
Y en algunos casos necesito una acción sin argumentos ni tipo de retorno. Entonces escribo algo como esto:
Action<Void, Void> a = () -> { System.out.println("Do nothing!"); };
Sin embargo, me da un error de compilación, necesito escribirlo como
Action<Void, Void> a = (Void v) -> { System.out.println("Do nothing!"); return null;};
Lo cual es feo. ¿ Hay alguna forma de deshacerse del Void
parámetro de tipo?
Aceptado
Úselo Supplier
si no toma nada, pero devuelve algo.
Úselo Consumer
si toma algo, pero no devuelve nada.
Úselo Callable
si devuelve un resultado y podría arrojar (más parecido a Thunk
términos generales de CS).
Úselo Runnable
si no hace ninguna de las dos cosas y no puede lanzar.
Creo que esta tabla es breve y útil:
Supplier () -> x
Consumer x -> ()
BiConsumer x, y -> ()
Callable () -> x throws ex
Runnable () -> ()
Function x -> y
BiFunction x,y -> z
Predicate x -> boolean
UnaryOperator x1 -> x2
BinaryOperator x1,x2 -> x3
Como se dijo en las otras respuestas, la opción adecuada para este problema es unaRunnable