我有一个非常基本的问题。我刚刚开始使用vertx Framework。我无法理解一件事

vertx.createNetServer().connectHandler(new Handler<NetSocket>() {
@Override
public void handle(final NetSocket socket) {

    socket.dataHandler(new Handler<Buffer>() {
        public void handle(Buffer buffer) {
            /* I can access the socket object inside this handler */
            socket.write("Hello");
        }
    });
}
}).listen(1234);


但是如果我像这样单独编写处理程序函数

Handler<Message> socketHandler = new Handler<Buffer>() {
        public void handle(Buffer buffer) {
            /* How can i access the socket object now */
            socket.write("Hello"); //this will give error as it does not recognize the socket object
        }
    };


vertx.createNetServer().connectHandler(new Handler<NetSocket>() {
@Override
public void handle(final NetSocket socket) {
    socket.dataHandler(socketHandler);//now I write handler separately
}
}).listen(1234);


处理程序可以在同一java类或其他java类中的任何位置。请帮我,我如何才能单独编写处理程序,仍然访问套接字对象。

最佳答案

在第二个示例中,您没有将socket传递给socketHandler,因此您不能期望socketHandler知道它。

您可以通过创建类似createSocketHandler(final Socket socket)的方法来解决此问题,该方法返回Handler<Message>并替换您的socketHandler变量。

若要了解更多信息,并找出为什么需要socket成为final的原因,请查找“匿名内部类”

09-16 06:49