我有一个新手问题。如果我有一些全局变量由两个或多个类共享,我如何将它们放在一个单独的文件中,以便任何类都可以读取和更新它们。这在不使用接口的情况下可能吗?
是的,因为interface
的变量都是隐式的static
,所以每个变量在jvm中只有一个实例。
然而,[在我看来]更好的方法可能是在一些singleton类中声明它们并使用它
实现这一点的最佳方法是通过接口方法访问共享应用程序状态,然后有一个包含变量的实现类,并在构建过程中将该类的实例传递给其他类(它们接受该实例作为接口的实例)。
这比使用静态类或单例要好,因为它允许您模拟共享状态的功能进行测试,提高通用代码的可重用性,并允许您在不影响任何使用它的代码的情况下更改共享状态的实现和配置
例如
// 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..
}
}