2012-03-02 9 views
0

私は初心者の質問があります。 2つ以上のクラスによって共有されるいくつかのグローバル変数がある場合、どのクラスを別のファイルに持っていけば、どのクラスでもそれを読み込んで更新することができます。インターフェイスを使用せずにこれは可能ですか?グローバル変数用のJava独立ファイル

+0

[Javaでグローバル変数](http://stackoverflow.com/questions/4646577/global-variables-in-java) –

答えて

5

はい、interfaceの変数はすべて暗黙的にstaticです。したがって、これらの変数のそれぞれは、jvmにインスタンスが1つしかありません。

しかし、私の意見では、もっと良い方法は、おそらく彼らがsingletonクラスで宣言して使用されていることでしょう。

1

これを行う最も良い方法は、共有アプリケーションの状態をインターフェイスメソッドでアクセスできるようにし、次に変数を保持する実装クラスを持ち、構築中にこのクラスのインスタンスを他のクラスに渡すことです。インタフェースのインスタンス)。

これは、テストのために共有状態の機能を模擬し、一般的なコードの再利用性を向上させ、影響を与えずに共有状態の実装と構成を変更できるようにするため、そのコードを使用しています。

など。

// Session interface for all application shared state. 
public interface ApplicationSession 
{ 
    public int getMaxUserLimit(); 
} 

// A backing for the interface (simple in memory version, maybe future versions use a database, who knows). 
public class SomeApplicationSession implements ApplicationSession 
{ 
    private volatile int maxUserLimit = 0; 
    public void setMaxUserLimit(int limit) { this.maxUserLimit = limit; } 
    public int getMaxUserLimit() { return maxUserLimit; } 
} 


// ClassA uses the supplied session. 
public class MyClassA 
{ 
    private ApplicationSession session; 
    public myClassA(ApplicationSession session) 
    { 
    this.session = session; 
    } 
} 

// usage... 
public class MyMain 
{ 
    public static void main(String[] args) 
    { 
    // Create/get session (ultimately possibly from a factory). 
    ApplicationSession session = new SomeApplicationSession(); 

    ClassA myClassA = new ClassA(session); 
    // do stuff.. 
    } 
} 
+0

の可能複製あなたが私にこの部分を説明してくださいすることができますApplicationSessionセッション=は新しいですSomeApplicationSession(); – user1064089

+0

@ user1064089これは、アプリケーションセッションのインスタンスをインスタンス化する単なる例です(そして、この1つのインスタンスは、構築時に他のクラス間で共有されます)。これを書かれているように便利にするには、インターフェイスで設定されたメソッドを宣言することもできます(または、セッション内の変数を変更する方法はありません)。 –

関連する問題