1

我来自编写大量 JavaScript,所以请耐心等待。

我有 3 个 HashMap,我在不同类的方法中引用它们。我的代码(非常简单)如下所示:

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?

4

2 回答 2

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
于 2012-11-18T08:38:51.240 回答
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确实是非空的。

于 2012-11-18T09:04:16.313 回答