-1

私はJavaクラスを持っています:

public class httpd implements Runnable
{

   public void createHttpdStatistics
   {
      httpdStatistics stats = new httpdStastics(this);
   }

}

statsここで、 httpd 内で作成されたオブジェクトを別のクラスで取得します。httpd オブジェクトが起動すると、jvm で実行されます。httpd クラス内に get メソッドを作成するのに苦労しましたが、他のクラスにいるときに、get メソッドを呼び出して統計オブジェクトを取得する正確な httpd オブジェクトを取得するにはどうすればよいですか?

編集

public class httpd implements Runnable
{

    public static void main(String[] args)
    {
        httpd server = new httpd();
        OtherClass oc = new OtherClass(server);
    }
{


MY OWN MAIN

public class myownmain
{
public static void main(String[] args)
{
    //Here I need OtherClass object created in httpd class
}
}
4

2 に答える 2

0

クラスhttpdのstatsオブジェクトにゲッターを提供することにより、CTOR内で必要な他のクラスにstatsオブジェクトを渡す際の問題は何ですか?
これはもちろん、createHttpdStatisticsメソッドが実行のコードで実行されない場合のみですメソッド(私はあなたのpvovideそれをお勧めします)。
createHttpdStatisticsメソッドがrunメソッド内で(別のスレッドで)実行される場合、スレッド間で共有データ構造(たとえば、共有データ構造として使用できる共有シングルトーン)を作成することを検討する必要があります。スレッド内のHttpdStatisticsオブジェクト。
この場合、コードは次のようになります。

public class httpd implements Runnable
{

   public void createHttpdStatistics()
   {
      httpdStatistics stats = new httpdStastics(this);
      StatsManager.getInstance().putStats(stats);
   }

   public void run() {
      //I assume the creation is done at the run method. Maybe I'm wrong here.
      createHttpdStatistics();
   }


}

そして、これをコードのどこかで使用します-

HttpdStatistics stats = StatsManager.getInstance().getStats();
MyClass  stats = new MyClass(stats); //passing stats to another object.

もちろん、statsオブジェクトの下のgetStatsがシングルトーンに設定されていることを確認するか、getStats()がnullを返すかどうかを確認する必要があります。

于 2012-07-07T08:15:57.233 に答える
0

ここに投稿されたコードを考えると、たとえば、他のクラスでは、オブジェクトのOtherClassセッターを用意するか、コンストラクターでインスタンスを提供する必要があります。この方法はへの参照を持ちますhttpdhttpdOtherClassOtherClasshttpd

public class OtherClass{
   httpd httpd_ = null;

   public OtherClass(httpd httpd_){
      this.httpd_ = httpd_;
   }
   // Access and use stats from httpd
   public void useStats(){
      httpdStatistics stats = httpd_.getStatistics()
      if(stats != null){
        // Do something here
      }else{
        // stats not set yet, the thread did probably not start yet
      }
   }
}

アプリケーションのメインでは、次のものを使用できます。

httpd  h = new httpd();
OtherClass otherClass = new OtherClass(h);

EDITコメントの1つで述べたように、stats変数は2つのスレッド間で共有されるため、同期して排他的な方法で更新する必要があります。

于 2012-07-07T08:10:54.383 に答える