我有一个非常基本的问题。我刚开始使用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);
Handler可以位于同一java类或其他java类中的任何位置。请帮我看看如何单独编写处理程序并仍然访问套接字对象。
答案 0 :(得分:4)
在您的第二个示例中,您没有将socket
传递给socketHandler
,因此您不能指望socketHandler
了解它。
您可以通过创建createSocketHandler(final Socket socket)
之类的方法来解决此问题,该方法会返回Handler<Message>
并替换您的socketHandler
变量。
要了解详情,并找出您需要socket
成为final
的原因,请查看“匿名内部课程”