初始化空HashMap

时间:2012-11-18 08:32:29

标签: java hashmap

我来自写了很多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?

2 个答案:

答案 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确实是非空的。