я просто столкнулся своеобразную небольшую проблему:Lambda не работает WebSocket сессии
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);
}
Кто-нибудь знает, почему лямбда-выражения не будут работать в этом случае? Ошибка компиляции, никакого исключения, нет ничего. Метод '' onMessage '' просто не называется.
Я использую Java 1.8.0_65 и эталонную реализацию Tyrus 1.9.
[«Однако компилятор будет рассматривать любой интерфейс, соответствующий определению функционального интерфейса как функционального интерфейса, независимо от того, присутствует или нет аннотация« Функциональный интерфейс »в объявлении интерфейса.»] (Https://docs.oracle. com/javase/8/docs/api/java/lang/FunctionalInterface.html) Вам не нужна аннотация, чтобы использовать его как lambda –
Также была бы ошибка компиляции, если бы это было так. –