Come posso fare qualcosa di simile in Java 8?esecuzione Java 8 lambda
boolean x = ((boolean p)->{return p;}).apply(true);
In questo momento ho il seguente errore:
The target type of this expression must be a functional interface
Come posso fare qualcosa di simile in Java 8?esecuzione Java 8 lambda
boolean x = ((boolean p)->{return p;}).apply(true);
In questo momento ho il seguente errore:
The target type of this expression must be a functional interface
Come per il JLS section 15.27:
It is a compile-time error if a lambda expression occurs in a program in someplace other than an assignment context (§5.2), an invocation context (§5.3), or a casting context (§5.5).
E 'anche possibile utilizzare un'espressione lambda in un return
statement.
Possiamo quindi riscrivere il vostro esempio in quattro modi diversi:
Con la creazione di un contesto di assegnazione:
Function<Boolean, Boolean> function = p -> p;
boolean x = function.apply(true);
Con la creazione di un contesto invocazione:
foobar(p -> p);
private static void foobar(Function<Boolean, Boolean> function) {
boolean x = function.apply(true);
}
Creando un contesto di casting:
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
Utilizzando un return
dichiarazione:
boolean x = function().apply(true);
private static Function<Boolean, Boolean> function() {
return p -> p;
}
Inoltre, in questo semplice esempio, l'intera espressione lambda può essere riscritta come:
UnaryOperator<Boolean> function = UnaryOperator.identity();
Grazie mille! –
Gli esempi che posso vedere fare non usare {}, poiché è pensato per essere una singola affermazione. [Tutorial] (http://winterbe.com/posts/2014/03/16/java-8-tutorial/) – flaschenpost
La stessa cosa senza un {} giro di ritorno p. Non penso che questo sia il problema. –
Il tuo errore è nell'assumere che 'Funzione' abbia uno stato speciale in modo che il tipo di lambda venga automaticamente forzato in esso. La tua espressione non ha in effetti alcun vincolo di tipo di destinazione. –