0
class Monitor {
  TheManager manager;
  Map<String, Subject> subjectMap;
  public Monitor() {
    TheManager manager = new TheManager();
    Map<String, Subject> subjectMap = new HashMap<String, Subject>();
  }

  public void addObject(String objName, Object obj) {
    if(objName == null) System.out.println("name null");
    if(obj == null) System.out.println("obj null");
    if(manager == null) System.out.println("manager null");
    manager.addObject(objName, obj);
  }
}

manager が null であるため、Null Pointer Exception が発生します。コードの別の場所で Monitor のオブジェクトをインスタンス化しました。メソッド「addObject」を使用しようとすると、「manager null」を出力する直前にNPEが表示されます(明らかにそうであるため)。

ここで非常に基本的なものが欠けているように感じます...誰か助けてくれますか?

4

4 に答える 4

6

コンストラクターには含まれています

TheManager manager = new TheManager();

それ以外の

this.manager = new TheManager();

の同じゲームsubjectMap

于 2012-07-23T22:54:49.327 に答える
2

manager 、つまりオブジェクトのフィールドを割り当てることはありません。コンストラクターでは、代わりにローカル変数を割り当てています。変数はフィールドを隠します。

于 2012-07-23T22:54:50.670 に答える
1

Java では説明できませんが、英語では説明できます :P

インスタンス変数があることに注意してください

TheManager manager;

何にも設定されていません。次に、コンストラクターで別の変数を作成します。

TheManager manager = new TheManager();

これは、コンストラクターの最後でスコープ外になります。インスタンス変数を参照するには、新しいローカル変数の代わりに、TheManagerコンストラクターの行頭から削除します。

于 2012-07-23T22:56:42.927 に答える
1

managersubjectMap2 回定義しています。コンストラクター内で 1 回、クラス内で 1 回。コンストラクターでそれらを割り当てると、それらはクラスではなくコンストラクターのスコープ内にあります。コンストラクター内の宣言を削除する必要があります。

于 2012-07-23T22:54:58.403 に答える