如何从上层阶级获取数据

时间:2011-08-17 09:04:33

标签: java

我有ServerServerConnection个类,其中用户通过Server连接,然后为他创建了一个ServerConnection实例,并在那里维护用户。

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

怎么可能?

ServerConnection类中创建Server实例,因此要弄清楚如何从一级(到Server类)获取数据并不容易。

3 个答案:

答案 0 :(得分:2)

如果ServerConnectionServer的内部类,则可以直接访问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构造函数。