![](/img/trans.png)
[英]How to access the object present i na public method of a class in another Java class
[英]Java: How should I reference a public object from another class?
我至少知道三種方式。 通過方法傳遞對象,直接引用對象,或者在新類中創建快捷方式到其他類的對象。
例如,我有一個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
直接引用對象或在類中設置快捷方式?
哪個更快?
你應該為這個值寫一個getter,所以:
private static DataOutputStream toServer;
public static DataOutputStream getToServer() {
return toServer;
}
在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
您幾乎從不想公開數據字段,因為它可能會被更改。 使DataOutputStream對Main類是私有的,然后讓主類有一個使用DataOutputStream的方法。 但是,聽起來你有另一個對象(類)將主類稱為對象。 這可能不會(並且可能不會)工作,因為main是靜態的,不能保證DataOutputStream已初始化。 我會創建另一個可以直接處理它的類。 當靜態類本身被視為執行對象工作的對象時,很難處理它們。 至於速度,除非你多次調用這個東西,通過一個方法獲得它而不是直接獲取公共變量與DataOutputStream完成其工作所花費的時間相比沒有任何影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.