用于全局变量的java单独文件

时间:2012-03-02 18:24:05

标签: java global-variables

我有一个新手问题。如果我有一些由两个类或更多类共享的全局变量,我如何将它们放在一个单独的文件中,以便任何类都可以读取和更新它们。这可能不使用Interfaces吗?

2 个答案:

答案 0 :(得分:5)

是的,因为interface个变量都是隐式static,所以这些变量中的每一个在jvm中只有一个实例。

然而,[在我看来]更好的方法是将它们在某些singleton类中声明并使用它。

答案 1 :(得分:1)

执行此操作的最佳方法是通过接口方法访问共享应用程序状态,然后拥有一个包含变量的实现类,并在构造期间将该类实例传递给其他类(它们接受为接口的实例)。

这比使用静态类或单例更好,因为它允许您模拟共享状态的功能以进行测试,提高通用代码的可重用性,并允许您更改共享状态的实现和配置,而不会影响任何使用它的代码。

E.g。

// 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..
  }
}