Ho appena incontrato un piccolo problema peculiare:Lambda non funziona in websocket Sessione
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);
}
Qualcuno sa perché le espressioni lambda non funziona in questo caso? Non ci sono errori di compilazione, nessuna eccezione, niente di niente. Il metodo "onMessage" non viene semplicemente chiamato.
Uso Java 1.8.0_65 e l'implementazione di riferimento Tyrus 1.9.
["Tuttavia, il compilatore tratterà qualsiasi interfaccia che soddisfi la definizione di un'interfaccia funzionale come interfaccia funzionale indipendentemente dal fatto che sia presente o meno un'annotazione di FunctionalInterface nella dichiarazione dell'interfaccia."] (Https://docs.oracle. com/javase/8/docs/api/java/lang/FunctionalInterface.html) Non è necessario l'annotazione per usarlo come lambda –
Inoltre, se fosse il caso, ci sarebbe un errore di compilazione. –