Il seguente codice Java non riesce a compilare:Perché questo Java 8 lambda non riesce a compilare?
@FunctionalInterface
private interface BiConsumer<A, B> {
void accept(A a, B b);
}
private static void takeBiConsumer(BiConsumer<String, String> bc) { }
public static void main(String[] args) {
takeBiConsumer((String s1, String s2) -> new String("hi")); // OK
takeBiConsumer((String s1, String s2) -> "hi"); // Error
}
Le relazioni del compilatore:
Error:(31, 58) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to void
La cosa strana è che la linea marcata "OK" compila bene, ma la linea marcata "errore" non riesce . Sembrano essenzialmente identici.
è un errore quando il metodo dell'interfaccia funzionale restituisce void? –
@NathanHughes Nope. Risulta essere centrale nella domanda- vedere la risposta accettata. –
dovrebbe esserci un codice all'interno di '{}' di 'takeBiConsumer' ... e in tal caso, potresti dare un esempio ... se leggo correttamente,' bc' è un'istanza della classe/interfaccia 'BiConsumer' , e quindi dovrebbe contenere un metodo chiamato 'accept' per abbinare la firma dell'interfaccia ... ... e se è giusto, allora il metodo' accept' deve essere definito da qualche parte (es. una classe che implementa l'interfaccia) .. così è quello che dovrebbe essere nel '{}' ?? ... ... ... grazie – dsdsdsdsd