[英]Null Pointer exception when trying to return HashMap value in java
我正在處理我的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);
}
}
ngram字段仍然為空,因為您在構造函數的范圍內聲明了一個新變量(ngram)。 請嘗試以下操作:
public NgramModel() {
ngram = new HashMap...
}
使用這種方式-
import java.util.HashMap;
public class NgramModel
{
private HashMap<String,Integer> ngram;
public NgramModel()
{
ngram = new HashMap <String, Integer>();
ngram.put("aa", 2);
}
public HashMap<String,Integer> getValue() {
return ngram;
}
}
要么
import java.util.HashMap;
public class NgramModel
{
private HashMap<String,Integer> ngram = new HashMap <String, Integer>();
public NgramModel()
{
ngram.put("aa", 2);
}
public HashMap<String,Integer> getValue() {
return ngram;
}
}
因為,在構造函數內部,您正在創建另一個局部變量並對其進行定義,而不是在定義類級成員變量本身。
如果未初始化,則映射類型的實例成員將始終為null。 在這種情況下,您應該重新編寫代碼,例如
public class NgramModel
{
private Map<String,Integer> ngram;
public NgramModel() {
ngram = new HashMap <String, Integer>();
ngram.put("aa", 2);
}
public Map<String,Integer> getValue() {
return ngram;
}
}
並且不要在實現中鍵入任何成員/變量。 如果可能,您應該使用接口進行輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.