访问对象Inside Anonymous Handler函数

时间:2014-03-24 19:23:16

标签: java vert.x

我有一个非常基本的问题。我刚开始使用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类中的任何位置。请帮我看看如何单独编写处理程序并仍然访问套接字对象。

1 个答案:

答案 0 :(得分:4)

在您的第二个示例中,您没有将socket传递给socketHandler,因此您不能指望socketHandler了解它。

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

要了解详情,并找出您需要socket成为final的原因,请查看“匿名内部课程”