我有一个非常基本的问题。我刚刚开始使用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
的原因,请查找“匿名内部类”