Następujący kod Java nie może się skompilować:
@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
}
Kompilator raportuje:
Error:(31, 58) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to void
Dziwne jest to, że linia oznaczona jako „OK” kompiluje się dobrze, ale linia oznaczona jako „Error” zawodzi. Wydają się zasadniczo identyczne.