2017-04-26 6 views
0

私はサーバーを構成するクラスを持っています。サーバーオブジェクトは静的であり、遅延初期化されます。問題は、サーバーの設定の一部が、そのクラスを含む非静的メンバー変数から来ていることです。明らかに、非静的メンバーにアクセスすることはできません。これを回避する方法はありますか?非静的変数を使用してサーバーを構成できますか?サーバーは静的なままでなければなりません。スタティック・レイジー・イニシャライザ

public class ClassA { 

private static MyServer myServer; 
private int a; 
private int b; 

public ClassA(int a, int b) { 
    this.a = a; 
    this.b = b; 
} 

public static MyServer getMyServer() { 

    if(myServer == null) { 
     myServer = configureServer(); 
    } 

    return myServer; 
} 

private static MyServer configureServer() { 
    MyServer myServer = new MyServer(); 
    myServer.setaPlusB(a + b); 

    return myServer; 
} 

}

public class MyServer { 

    private int aPlusB; 

    public void setaPlusB(int aPlusB) { 
     this.aPlusB = aPlusB; 
    } 
} 
+0

どうしたらよいですか?あなたの質問は、奇妙で抽象的です。どの非静的変数を使用してサーバーを構成しますか?彼らはどこから来るべきですか?もちろん、非静的変数をパラメータとして 'getMyServer'メソッドに渡すこともできます。しかし、あなたがそれを望まないなら、どこから来るべきですか? –

+0

唯一の方法は、getMyServer関数を呼び出すときにClassAのインスタンスをパラメータとして使用することです。 Btwの "静的な遅延ゲッター"はシングルトンのパターンを呼び出します。 – Armin

答えて

1

あなたの質問から、私は以下のようなものとして、それを理解します。

public class Server { 

    private class ServerImpl { 

     private int ab; 

     public ServerImpl() { 

      ab = Server.a + Server.b; 
     } 
    } 

    private static int a; 
    private static int b; 
    private static ServerImpl s; 

    static { 

     a = 10; 
     b = 10; 
    } 

    public static ServerImpl getServer(int newA, int newB) { 

     a = newA; 
     b = newB; 
     return getServer(); 
    } 

    public static ServerImpl getServer() { 

     if (s == null) { 
      s = new ServerImpl(); 
     } 
     return s; 
    } 
}