2012-03-02 111 views
0

我有一個新手問題。如果我有一些由兩個或更多類共享的全局變量,我可以如何將它們放在單獨的文件中,以便任何類都可以讀取和更新它們。這可能沒有使用接口?java獨立文件的全局變量

+0

可能重複(http://stackoverflow.com/questions/4646577/global-variables-in-java) – 2012-03-02 18:25:53

回答

5

是的,因爲interface的變量都隱式地爲static,所以每個變量在jvm中只有一個實例。

但是,更好的方法[在我看來]可能會讓他們在一些singleton類中聲明並使用它。

1

做到這一點,最好的辦法是必須通過接口方式共享應用程序狀態訪問,然後有一個實現類,用於保存變量,並在施工期間這個類的實例傳遞給你的其他類(他們接受作爲界面的一個實例)。

這比使用靜態類或單例更好,因爲它允許您嘲笑共享狀態的功能以進行測試,提高了通用代碼的可重用性,並允許您在不影響的情況下更改共享狀態的實現和配置任何使用它的代碼。

E.g. [Java中的全局變量]的

// 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 2012-03-02 19:48:56

+0

@ user1064089這僅僅是實例的應用會話的一實例的例子(然後這一個情況爲您的其他類之間的施工時間共享)。爲了使它在寫入時很有用,你也希望在接口中聲明你的set方法(或者沒有辦法改變會話中的變量)。 – 2012-03-02 21:11:21