2011-08-17 30 views
2

我有一个ServerServerConnection类,其中一个用户通过Server连接,然后为他创建一个ServerConnection实例,并且用户在那里维护。如何从上一级获取数据

Server我有一些数据,我希望ServerConnection实例能够访问它。

怎么可能?

ServerConnection实例的Server类的内部创建的,因此是不容易弄清楚如何去上一级(以Server类),以从中获取数据。

+0

什么样的数据?也许你的课堂设计不是最佳的。 – Jacob

+0

您需要添加双向参考。让ServerConnection将Server作为参数。 –

+0

@cularis,在服务器类我拿着一个链表,我想服务器连接得到它的大小,所以我创建了一个函数来获取它的大小,但是如何从服务器连接实例访问这个函数呢? – Alon

回答

2

如果ServerConnection是一个内部类的Server,您可以直接访问Server实例的字段(即使是阴影):

public class Server { 
    private String data; 

    public class ServerConnection { 
    private int data; //shadows Server.data  

    public void connect() { 
     //access Server.data of the Server instance associated with this instance 
     Server.this.data = "xyz"; //Note that you also have write access, so that might be dangerous 
     ... 
    } 
    } 
} 

一种更好的方法可能是将Server实例传递给ServerConnection和由干将公开数据:

public class ServerConnection { 
    private Server server; 

    public ServerConnection(Server s) { 
    server = s; 
    } 

    public void connect() { 
    String serverData = server.getData(); 
    ... 
    } 
} 
0

创建它时,必须将Server实例传递给ServerConnection。因此,构造函数

public ServerConnection(Server serverInstanceParam) { 
    this.serverInstance = serverInstanceParam 

可以在本地存储服务器实例。然后,您可以在ServerConnection中的所有实例方法中访问它。

0

在大多数情况下,我会建议反对让ServerConnection直接引用Server对象,因为这会创建一个循环依赖关系。如果这是你想要的连接继承一个简单的值,比如字符串或整数,只是把它作为一个参数传递给ServerConnection构造:

class ServerConnection { 
    private final int timeout; 
    public ServerConnection(int timeout) { 
     this.timeout = timeout; 
    } 
} 
// Usage from the Server class: 
ServerConnection connection = new ServerConnection(timeout); 

如果它是一个更复杂的结构,你可能想使一个独立的类:

class ServerConfig { 

    private int timeout; 
    private boolean keepAlive; 
    private String id; 
    // accessors omitted 

} 

...然后将其作为参数传递给ServerConnection构造函数。