我至少知道三种方式。通过方法传递对象,直接引用该对象,或者在新类中创建一个快捷方式到另一个类的对象。
例如,我有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
直接引用对象或在类中设置快捷方式?
哪个更快?
答案 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完成其工作所花费的时间相比没有任何影响。