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);
}
}
我得到一个Null Pointer Exception,因为manager是null。我已经在代码中的其他地方实例化了Monitor的对象。当我尝试使用方法“addObject”时,它会在打印“manager null”之前给我NPE(因为它显然是)。
我觉得我在这里缺少一些非常基本的东西......任何人都可以帮忙吗?
答案 0 :(得分:6)
您的构造函数包含
TheManager manager = new TheManager();
而不是
this.manager = new TheManager();
subjectMap
的相同游戏。
答案 1 :(得分:2)
您永远不会分配经理,即对象的字段。 在构造函数中,您将分配一个局部变量。 变量会影响你的领域。
答案 2 :(得分:1)
您要定义manager
和subjectMap
两次。一旦进入构造函数并进入类中。在构造函数中分配它们时,它们在构造函数的范围内,而不是类。您需要删除构造函数中的声明。
答案 3 :(得分:1)
我无法用Java解释它,但我可以用英语解释:P
请注意,您有一个实例变量
TheManager manager;
哪个没有设置。然后在构造函数中创建一个不同的变量:
TheManager manager = new TheManager();
在构造函数的末尾超出范围。要引用实例变量而不是新的本地变量,请从构造函数中的行的开头删除TheManager
。