簡體   English   中英

Java:我應該如何從另一個類引用公共對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM