0

I have a very basic question. I have just started with vertx Framework. There is one thing I am not able to understand like

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);

but if I write the handler function separately like this

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 can be anywhere in the same java class or other java class. Please help me me how I can write handler separately and still access the socket object.

4

1 回答 1

4

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

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

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

于 2014-03-24T19:28:56.840 回答