我有一个Server
和ServerConnection
类,其中一个用户通过Server
连接,然后为他创建一个ServerConnection
实例,并且用户在那里维护。如何从上一级获取数据
在Server
我有一些数据,我希望ServerConnection
实例能够访问它。
怎么可能?
的ServerConnection
实例的Server
类的内部创建的,因此是不容易弄清楚如何去上一级(以Server
类),以从中获取数据。
我有一个Server
和ServerConnection
类,其中一个用户通过Server
连接,然后为他创建一个ServerConnection
实例,并且用户在那里维护。如何从上一级获取数据
在Server
我有一些数据,我希望ServerConnection
实例能够访问它。
怎么可能?
的ServerConnection
实例的Server
类的内部创建的,因此是不容易弄清楚如何去上一级(以Server
类),以从中获取数据。
如果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();
...
}
}
创建它时,必须将Server实例传递给ServerConnection。因此,构造函数
public ServerConnection(Server serverInstanceParam) {
this.serverInstance = serverInstanceParam
可以在本地存储服务器实例。然后,您可以在ServerConnection中的所有实例方法中访问它。
在大多数情况下,我会建议反对让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
构造函数。
什么样的数据?也许你的课堂设计不是最佳的。 – Jacob
您需要添加双向参考。让ServerConnection将Server作为参数。 –
@cularis,在服务器类我拿着一个链表,我想服务器连接得到它的大小,所以我创建了一个函数来获取它的大小,但是如何从服务器连接实例访问这个函数呢? – Alon