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;
    }
} 

ただし、他のメソッドでそれらを呼び出すと、null になります。

新しい空の 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これは、それが実際に非 nullであることを証明します。

于 2012-11-18T09:04:16.313 に答える