Argumento nulo lambda de Java 8

Resuelto Wickoo asked hace 9 años • 10 respuestas

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 Voidparámetro de tipo?

Wickoo avatar Apr 29 '15 20:04 Wickoo
Aceptado

Úselo Suppliersi no toma nada, pero devuelve algo.

Úselo Consumersi toma algo, pero no devuelve nada.

Úselo Callablesi devuelve un resultado y podría arrojar (más parecido a Thunktérminos generales de CS).

Úselo Runnablesi no hace ninguna de las dos cosas y no puede lanzar.

x1a0 avatar Oct 20 '2016 11:10 x1a0

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

rado avatar Jun 17 '2020 17:06 rado