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 为空。我已经在代码的其他地方实例化了一个 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

您永远不会分配经理,即对象的字段。在您的构造函数中,您正在分配一个局部变量。该变量会影响您的领域。

于 2012-07-23T22:54:50.670 回答
1

你定义managersubjectMap两次。一次在构造函数中,一次在类中。当您在构造函数中分配它们时,它们在构造函数的范围内,而不是在类中。您需要删除构造函数中的声明。

于 2012-07-23T22:54:58.403 回答
1

我无法用 Java 解释它,但我可以用英语:P

请注意,您有一个实例变量

TheManager manager;

没有设置任何东西。然后在您的构造函数中创建一个不同的变量:

TheManager manager = new TheManager();

在构造函数的末尾超出范围。为了引用实例变量,而不是新的本地变量,请TheManager从构造函数的行首删除。

于 2012-07-23T22:56:42.927 回答