java - 尝试在java中返回HashMap值时出现空指针异常

标签 java pointers nullpointerexception hashmap

我正在处理我的 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/

相关文章:

java - 使用 API21 编译时出现 UnsatisfiedLinkError

java - 在 Eclipse 上构建 Spring MVC 项目时出现多个错误

在C中将两个int数组复制到一个char*

c++ - 比较对象指针

JavaFX TableView NullPointerException

java - 为什么这个静态字段为空?

java - 将值添加到 recyclerView 的部分中

java - 我如何做到每次达到 10 时都会播放声音,所以 10, 20, 30, 40

使用堆栈的 C/C++ 算术表达式求值

JavaFX:在单独的非 Controller 类中更新 UI