Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局变量的java独立文件_Java_Global Variables - Fatal编程技术网

全局变量的java独立文件

全局变量的java独立文件,java,global-variables,Java,Global Variables,我有个新手问题。如果有两个或更多类共享的一些全局变量,如何将它们放在单独的文件中,以便任何类都可以读取和更新它们。这在不使用接口的情况下是可能的吗?是的,因为接口s变量都是隐式的静态的,所以每个变量在jvm中只有一个实例 然而,[在我看来]更好的方法可能是在某个类中声明它们并使用它。是的,因为interfaces变量都是隐式的static,所以这些变量在jvm中只有一个实例 但是,更好的方法[在我看来]可能是在某个类中声明它们并使用它。最好的方法是通过接口方法访问共享应用程序状态,然后使用一个包

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

是的,因为
接口
s变量都是隐式的
静态的
,所以每个变量在jvm中只有一个实例


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

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


但是,更好的方法[在我看来]可能是在某个类中声明它们并使用它。

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

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

例如


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

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

例如


你能给我解释一下这个部分吗:ApplicationSession session=newsomeapplicationsession()@user1064089,这只是实例化应用程序会话实例的一个示例(然后在构建时在其他类之间共享这一实例)。为了使这一部分在编写时有用,您还需要在接口中声明您的set方法(或者无法更改会话中的变量)@user1064089,这只是实例化应用程序会话实例的一个示例(然后在构建时在其他类之间共享这一实例)。为了使其在编写时有用,您还需要在接口中声明set方法(或者无法更改会话中的变量)。
// 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..
  }
}