我正在处理我的 java 项目,并在尝试返回 HashMap 值时收到空指针异常消息。
public class NgramModel
{
private HashMap<String,Integer> ngram;
public NgramModel()
{
HashMap<String,Integer> ngram = new HashMap <String, Integer>();
ngram.put("aa", 2);
}
public HashMap<String,Integer> getValue() {
return ngram;
}
}
当我的 JUnit 测试到达线路时:
assertEquals(2,(int)test.getValue().get("aa"));
我收到:没有异常消息。并且测试崩溃了。
最佳答案
您需要了解变量阴影。
从一个简单的示例开始,不使用构造函数:
static int test = 10;
public static void main(final String[] args) throws IOException {
int test = 20;
System.out.println(test);
}
这段代码打印什么?
答案是20
。原因是您在方法中声明的 test
实际上与您在类中声明的 不同 test
。您有两个处于不同作用域的变量。
您在这里遇到了同样的问题:
public class NgramModel {
//one `ngram`
private HashMap<String,Integer> ngram;
public NgramModel() {
//a second `ngram`
HashMap<String,Integer> ngram = new HashMap <String, Integer>();
ngram.put("aa", 2);
}
}
您不需要需要重新声明变量:
public class NgramModel {
//one `ngram`
private HashMap<String,Integer> ngram;
public NgramModel() {
//reference the `ngram` from above
ngram = new HashMap <String, Integer>();
ngram.put("aa", 2);
}
}
关于java - 尝试在java中返回HashMap值时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23448238/