2014-03-24 46 views
0

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

回答

4

在你的第二个例子中,你没有通过socketsocketHandler,所以你不能指望socketHandler知道它。

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

要了解更多信息,并找出原因,你需要socketfinal,查找“匿名内部类”

+0

非常感谢你! – Mubbashar