Mã Java sau thất bại trong việc biên dịch:Tại sao Java 8 lambda này không biên dịch được?
@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
}
Các báo cáo trình biên dịch:
Error:(31, 58) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to void
Điều lạ là dòng được đánh dấu "OK" biên dịch tốt, nhưng dòng được đánh dấu "Lỗi" thất bại . Họ có vẻ giống hệt nhau.
đây có phải là lỗi đánh máy ở đây mà phương thức giao diện chức năng trả về void không? –
@NathanHughes Không. Nó trở thành trung tâm của câu hỏi - xem câu trả lời được chấp nhận. –
nên có mã bên trong '{}' của 'takeBiConsumer' ... và nếu vậy, bạn có thể đưa ra một ví dụ ... nếu tôi đọc chính xác,' bc' là một thể hiện của lớp/giao diện 'BiConsumer' và do đó phải chứa một phương thức được gọi là 'accept' để khớp với chữ ký giao diện ... ... và nếu đúng, thì phương thức' accept' cần được định nghĩa ở đâu đó (ví dụ: một lớp thực hiện giao diện) .. Vậy là cái gì nên ở trong '{}' ?? ... ... ... thanks – dsdsdsdsd