我有Server
和ServerConnection
个类,其中用户通过Server
连接,然后为他创建了一个ServerConnection
实例,并在那里维护用户。
在Server
我有一些数据,我希望ServerConnection
实例能够访问它。
怎么可能?
在ServerConnection
类中创建Server
实例,因此要弄清楚如何从一级(到Server
类)获取数据并不容易。
答案 0 :(得分: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
并通过getter公开数据:
public class ServerConnection {
private Server server;
public ServerConnection(Server s) {
server = s;
}
public void connect() {
String serverData = server.getData();
...
}
}
答案 1 :(得分:0)
创建服务器时,必须将Server实例传递给ServerConnection。那么构造函数
public ServerConnection(Server serverInstanceParam) {
this.serverInstance = serverInstanceParam
可以在本地存储服务器的实例。然后,您可以在ServerConnection中的所有实例方法中访问它。
答案 2 :(得分: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
构造函数。