我来自写了很多JavaScript,所以请耐心等待。
我有3个HashMaps,我在一个不同类的方法中引用它。我的代码(非常简单)看起来像这样:
public class MainClass {
private HashMap<String,Nation> randomHashMap = new HashMap<String,Nation>();
DifferentClass d = new DifferentClass(this);
} //with getters/setters
public class DifferentClass {
private MainClass mc;
public void randomMethod() {
System.out.println("randomHashMap is " + (mc.getRandomHashMap() == null));
} //returns null
public DifferentClass(MainClass c) {
this.mc = c;
}
}
但是,当我用其他方法调用它们时,它们是空的。
如何创建新的空HashMap?
答案 0 :(得分:5)
在MainClass mc
方法中使用之前,您需要初始化DifferentClass#randomMethod
变量。另外,请确保使用mc
变量而不是MainClass.getRandomHashMap()
方法(通过实际代码,我们不知道它的行为)。您的代码将如下所示:
public class DifferentClass {
private MainClass mc = new MainClass();
public void randomMethod() {
//assuming getRandomHashMap is the getter of randomHashMap attribute (and non static)
System.out.println("randomHashMap is " + (mc.getRandomHashMap() == null));
}
}
public class MainClass {
private HashMap<String,Nation> randomHashMap = new HashMap<String,Nation>();
DifferentClass d = new DifferentClass(this);
public HashMap<String,Nation> getRandomHashMap() {
return this.randomHashMap;
}
} //with getters/setters
答案 1 :(得分:0)
对于字段初始化,您发布的代码实际上完全可以。我用最少的干预从中做了一个SSCCE:
class Nation{}
public class MainClass {
private HashMap<String,Nation> randomHashMap = new HashMap<String,Nation>();
DifferentClass d = new DifferentClass(this);
public Object getRandomHashMap() {
return randomHashMap;
}
public static void main(String[] args) {
new MainClass().d.randomMethod();
}
} //with getters/setters
class DifferentClass {
private MainClass mc;
public void randomMethod() {
System.out.println("randomHashMap is " + (mc.getRandomHashMap() == null));
} //returns null
public DifferentClass(MainClass c) {
this.mc = c;
}
}
并打印
randomHashMap is false
证明randomHashMap
确实是非空的。