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