了解问题
我认为 全局变量 的资格是可以在代码中的任何位置访问和更改的变量,而无需关心静态/实例调用或将任何引用从一个类传递到另一个类。
通常如果你有 A 类
public class A {
private int myVar;
public A(int myVar) {
this.myVar = myVar;
}
public int getMyVar() {
return myVar;
}
public void setMyVar(int mewVar) {
this.myVar = newVar;
}
}
并且想要访问和更新 B 类中的 myvar,
public class B{
private A a;
public void passA(A a){
this.a = a;
}
public void changeMyVar(int newVar){
a.setMyvar(newVar);
}
}
您需要有一个类 A 的实例的引用,并像这样更新类 B 中的值:
int initialValue = 2;
int newValue = 3;
A a = new A(initialValue);
B b = new B();
b.passA(a);
b.changeMyVar(newValue);
assertEquals(a.getMyVar(),newValue); // true
解决方案
所以我对此的解决方案(即使我不确定这是否是一个好习惯)是使用单例:
public class Globals {
private static Globals globalsInstance = new Globals();
public static Globals getInstance() {
return globalsInstance;
}
private int myVar = 2;
private Globals() {
}
public int getMyVar() {
return myVar;
}
public void setMyVar(int myVar) {
this.myVar = myVar;
}
}
现在您可以通过以下方式在任何地方获取全局唯一实例:
Globals globals = Globals.getInstance();
// and read and write to myVar with the getter and setter like
int myVar = globals.getMyVar();
global.setMyVar(3);