gpt4 book ai didi

java - 在 Action 监听器中使用 Lambda 表达式

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:18 24 4
gpt4 key购买 nike

我们在 Java 中使用一些套接字 API,这些 API 广泛使用 ActionListeners。例如:

SocketServer server = SocketFactory.create().addListener(8888, "localhost")
.setHandler(new SocketHandler() {

public void handle(final ServerExchange exchange)
throws Exception {
exchange.send("Hello World");
}
}).create();

我想开始使用 Lambda 表达式简化部分代码。所以我开始使用以下方法重写上面的示例:

SocketServer server = SocketFactory.create().addListener(8888, "localhost")
.setHandler(new SocketHandler() {
exchange -> {
exchange.send("Hello World");
}

}).create();

但是 Eclipse(支持 JDK1.8 的 Luna)提示说 handle(..) 方法没有实现。然而,使用 handle 方法正是我想避免实现的……知道我该如何解决吗?
谢谢!

更新:感谢您的回复。好吧,SocketHandler 是一个接口(interface),但是我现在将它包装在一个功能接口(interface)中,如下所示:

@FunctionalInterface

public interface SimpleFuncInterface extends SocketHandler{

void handle(ServerExchange exchange) throws Exception;

}

现在我的代码是这样的:

SocketServer  server = SocketFactory.create().addListener(8080, "localhost")
.setHandler(doWork(() -> exchange.send("Hello World"))).create();

server.start();
}
private static void doWork(SimpleFuncInterface itf) {


}

代码现在看起来没有错误,但是编译器提示 Lambda 表达式签名与功能接口(interface)方法 handle(ServerExchange) 的签名不匹配。有什么建议吗?

最佳答案

您的代码中似乎存在语法错误。您正在尝试在匿名内部类中定义 lambda 表达式。但是,您应该使用 lambda 表达式而不是匿名内部类。我猜以下工作:

SocketServer server = SocketFactory.create().addListener(8888, "localhost")
.setHandler(e -> { e.send("Hello World"); }).create();

如果 setHandler 方法被重载,可能需要提供更多信息,例如通过添加类型转换:

SocketServer server = SocketFactory.create().addListener(8888, "localhost")
.setHandler((SocketHandler) e -> { e.send("Hello World"); }).create();

关于java - 在 Action 监听器中使用 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com