begegnete ich nur ein eigentümliches kleines Problem:Lambda funktioniert nicht
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);
}
Weiß jemand, warum Lambda-Ausdrücke werden in diesem Fall nicht funktionieren? Es gibt keine Kompilierung-Fehler, keine Ausnahme, kein gar nichts. Die Methode ‚‘ onMessage ‚‘ ist einfach nicht genannt.
verwende ich Java 1.8.0_65 und die Tyrus Referenzimplementierung 1.9.
[ „Allerdings wird der Compiler jede Schnittstelle als eine funktionale Schnittstelle unabhängig davon, entsprechend der Definition einer funktionellen Schnittstelle behandeln, ob eine FunctionalInterface Anmerkung auf der Interface-Deklaration vorhanden ist.“] (Https://docs.oracle. com/JavaSE/8/docs/api/java/lang/FunctionalInterface.html) Sie die Annotation nicht brauchen –
es einen Compiler-Fehler wäre es auch als Lambda zu verwenden, wenn das der Fall war. –