如何在Java中将任意数据与对象相关联

时间:2012-11-28 02:35:10

标签: java android oop

我正在使用naga进行一些异步套接字编程。

但是我需要能够将任意数据附加到Socket对象。

例如我有这样的代码:

service = new NIOService();
// Server is JSONObject
NIOSocket socket = service.openSocket(Server.getString("ip"), Server.getInt("port"));
??? Add mydata to socket
socket.listen(observer); // See class below
System.out.println(socket.mydata);// get new data


public static class Observer extends SocketObserverAdapter {

        //Called when Socket makes connection
        @Override
        public void connectionOpened(NIOSocket socket) {
            System.out.println(socket.mydata); // get data
            socket.mydata = "yay!";// set data
        }
}

我遇到的问题是我需要在Observer.connectionOpened回调中的套接字对象上获取和设置数据,并且以后能够访问它。

我意识到可能没有办法只是向对象添加数据,但是将数据与对象关联起来的最佳方法是什么,以便我可以传递它并仍然访问(和修改)数据? / p>

我总是可以重新编译类代码以将变量添加到类中,但这似乎非常hackish,我试图远离它。

注意:我对Java编程很新,但不是一般的编程。

1 个答案:

答案 0 :(得分:2)

我想到的两种方法是:

将Socket包装在一个包含

信息的类中
class MySocketWithData {
    private final Socket theSocket;
    private String myData;
    ....
}

或者,维护一个包含您关注信息的Map

private final Map<Socket, MyCoolData> socketMap = new ConcurrentHashMap<>();
public void doSomething(Socket sock) {
    MyCoolData data = socketMap.get(sock);
}

我可能更喜欢第一个。如果你需要在自己周围交出Socket个实例并且无法替换自己的类,那么第二个更合适。