functional - Ejecución de Java 8 lambdas
java 8 supplier (1)
Según la sección 15.27 de JLS:
Es un error en tiempo de compilación si una expresión lambda ocurre en un programa en un lugar que no sea un contexto de asignación (§5.2), un contexto de invocación (§5.3) o un contexto de conversión (§5.5).
También es posible usar una expresión lambda en una declaración de return
.
Entonces podemos reescribir su ejemplo de cuatro maneras diferentes:
Al crear un contexto de asignación:
Function<Boolean, Boolean> function = p -> p; boolean x = function.apply(true);
Al crear un contexto de invocación:
foobar(p -> p); private static void foobar(Function<Boolean, Boolean> function) { boolean x = function.apply(true); }
Al crear un contexto de lanzamiento:
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
Usando una declaración de
return
:boolean x = function().apply(true); private static Function<Boolean, Boolean> function() { return p -> p; }
Además, en este ejemplo simple, toda la expresión lambda puede reescribirse como sigue:
UnaryOperator<Boolean> function = UnaryOperator.identity();
¿Cómo puedo hacer algo como esto en Java 8?
boolean x = ((boolean p)->{return p;}).apply(true);
En este momento me sale el siguiente error:
El tipo de destino de esta expresión debe ser una interfaz funcional