Der folgende Java-Code kann nicht kompiliert werden:
@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
}
Der Compiler meldet:
Error:(31, 58) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to void
Das Seltsame ist, dass die mit "OK" gekennzeichnete Zeile einwandfrei kompiliert wird, die mit "Fehler" gekennzeichnete Zeile jedoch fehlschlägt. Sie scheinen im Wesentlichen identisch zu sein.