tôi chỉ gặp một chút vấn đề đặc biệt:Lambda không làm việc trong WebSocket phiên
javax.websocket.Session session = //...
// this works
newSession.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String message) {
MyWebSocket.this.onMessage(message);
}
});
// these don't work
newSession.addMessageHandler((MessageHandler.Whole<String>) MyWebSocket.this::onMessage);
newSession.addMessageHandler((MessageHandler.Whole<String>) message -> MyWebSocket.this.onMessage(message));
void onMessage(String message) {
System.out.println(message);
}
Có ai biết tại sao biểu thức lambda sẽ không làm việc trong trường hợp này? Không có lỗi biên dịch, không có ngoại lệ, không có gì. Phương thức '' onMessage '' không được gọi.
Tôi sử dụng Java 1.8.0_65 và triển khai tham chiếu Tyrus 1.9.
["Tuy nhiên, trình biên dịch sẽ xử lý mọi giao diện đáp ứng định nghĩa của giao diện chức năng dưới dạng giao diện chức năng bất kể có chú thích FunctionalInterface có trên khai báo giao diện hay không."] (Https://docs.oracle. com/javase/8/docs/api/java/lang/FunctionalInterface.html) Bạn không cần chú thích để sử dụng nó như lambda –
Ngoài ra, sẽ có lỗi biên dịch nếu trường hợp đó xảy ra. –