2012-03-02 69 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