Java:我应该如何从另一个类引用公共对象?

时间:2014-05-05 18:35:33

标签: java pointers object reference

我至少知道三种方式。通过方法传递对象,直接引用该对象,或者在新类中创建一个快捷方式到另一个类的对象。

例如,我有DataOutputStream toServer

Main.java我声明(假设已经宣布袜子)

    public static DataOutputStream toserver;
    public static void main() {
      toServer = new DataOutputStream(sock.getOutputStream() );
   }

但在另一种方法中,我需要写入服务器。我应该:

Main.java

中的

    WriteStuff.write(toServer);

然后在WriteStuff.java

  public static void write(DataOutputStream toServer) {
    toServer.writeBytes("Foo\n");
  }

WriteStuff.java

    static DataOutputStream toServer = Main.toServer;
    public static void write() {
      toServer.writeBytes("Foo\n");
    }

或者,再次在WriteStuff.java

    Main.toServer.writeBytes("Foo\n");

建议的约定是什么?调用方法时传递对象,使用Main.objectName直接引用对象或在类中设置快捷方式?

哪个更快?

3 个答案:

答案 0 :(得分:2)

你应该为这个值写一个getter,所以:

private static DataOutputStream toServer;

public static DataOutputStream getToServer() {
    return toServer;
}

答案 1 :(得分:0)

在OOP中,最重要的是避免打破OO视图。我无法看到你所有的类映射,因为通常传递实例是最好的选择。

但也许你可以使用另一种方法,比如。

public interface IOutputHandler {
    public int write(Byte[] b);
}

public class Server {
     private OutputHandler oh;
     public void setOutputHandle(OutputHandler e) { this.oh = e; }
     public void Write(Byte[] b) { oh.write(b); }

  }

我不知道这个例子我的想法是否足够明确。在java中通常会传递一个将处理一些工作的类。

任何问题都不要犹豫; P

答案 2 :(得分:0)

您几乎从不想公开数据字段,因为它可能会被更改。使DataOutputStream对Main类是私有的,然后让主类有一个使用DataOutputStream的方法。 但是,听起来你有另一个对象(类)将主类称为对象。这可能不会(并且可能不会)工作,因为main是静态的,不能保证DataOutputStream已初始化。我会创建另一个可以直接处理它的类。当静态类本身被视为执行对象工作的对象时,很难处理它们。 至于速度,除非你多次调用这个东西,通过一个方法获得它而不是直接获取公共变量与DataOutputStream完成其工作所花费的时间相比没有任何影响。