2012-11-28 33 views
1

我正在使用naga來執行一些異步套接字編程。如何將任意數據與Java中的對象關聯

但是我需要能夠將任意數據附加到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回調套接字對象上設置數據,並能夠在稍後訪問它。

我意識到可能沒有辦法只是將數據添加到對象中,但將數據與對象關聯的最佳方式是什麼,以便我可以傳遞它並仍然可以訪問(並修改)數據?

我總是可以重新編譯類代碼以將變量添加到類中,但這似乎很駭人,我試圖遠離。

注意:我對Java編程相當陌生,但對一般編程不太熟悉。

回答

2

浮現在腦海中的兩種方法是:

包裹在一個類中的插口,隨身攜帶

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個實例放在自己周圍,並且不能替代你自己的類,則第二種方法會更合適。

+0

不幸的是,我必須傳遞該對象,但第二個選項將工作得很好。使用Map vs HashMap有什麼好處嗎? (我認識到HashMap就像是一個子類或者排序......效率更高嗎?) – korylprince

+0

'Map'是接口,'HashMap'是實現。還有其他的實現像'TreeMap',但它們中的大多數可能不適合'Socket's。 –

+1

謝謝!我得到了一切工作! – korylprince

相關問題