尝试在java中返回HashMap值时出现空指针异常
我正在处理我的java项目,在尝试返回HashMap值时收到一条空指针异常消息尝试在java中返回HashMap值时出现空指针异常,java,pointers,nullpointerexception,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
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;
}
}
我得到:没有例外信息。测试崩溃。字段ngram仍然为空,因为您正在构造函数的作用域中声明一个新变量(ngram)。请尝试以下操作:
public NgramModel() {
ngram = new HashMap...
}
字段ngram仍然为null,因为您正在构造函数的作用域中声明一个新变量(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;
公共类ngramodel
{
私有HashMap-ngram;
公共ngramodel()
{
ngram=newhashmap();
ngram.put(“aa”,2);
}
公共HashMap getValue(){
返回ngram;
}
}
或
import java.util.HashMap;
公共类ngramodel
{
私有HashMap ngram=newhashmap();
公共ngramodel()
{
ngram.put(“aa”,2);
}
公共HashMap getValue(){
返回ngram;
}
}
因为,在构造函数中,您正在创建另一个局部变量并定义它,而不是定义类级成员变量本身。使用这种方式-
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;
公共类ngramodel
{
私有HashMap-ngram;
公共ngramodel()
{
ngram=newhashmap();
ngram.put(“aa”,2);
}
公共HashMap getValue(){
返回ngram;
}
}
或
import java.util.HashMap;
公共类ngramodel
{
私有HashMap ngram=newhashmap();
公共ngramodel()
{
ngram.put(“aa”,2);
}
公共HashMap getValue(){
返回ngram;
}
}
因为,在构造函数中,您正在创建另一个局部变量并定义它,而不是定义类级成员变量本身。您需要了解变量隐藏 从一个简单的示例开始,不要使用构造函数:
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);
}
}
公共类ngramodel{
//一个ngram`
私有HashMap-ngram;
公共ngramodel(){
//第二个ngram`
HashMap ngram=新的HashMap();
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);
}
}
公共类ngramodel{
//一个ngram`
私有HashMap-ngram;
公共ngramodel(){
//参考上面的“ngram”
ngram=newhashmap();
ngram.put(“aa”,2);
}
}
您需要了解变量阴影
从一个简单的示例开始,不要使用构造函数:
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);
}
}
公共类ngramodel{
//一个ngram`
私有HashMap-ngram;
公共ngramodel(){
//第二个ngram`
HashMap ngram=新的HashMap();
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);
}
}
公共类ngramodel{
//一个ngram`
私有HashMap-ngram;
公共ngramodel(){
//参考上面的“ngram”
ngram=newhashmap();
ngram.put(“aa”,2);
}
}
映射类型的实例成员如果未初始化,将始终为空。在这种情况下,您应该对代码进行如下重新表述
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;
}
}
公共类ngramodel
{
私有地图;
公共ngramodel(){
ngram=newhashmap();
ngram.put(“aa”,2);
}
公共映射getValue(){
返回ngram;
}
}
并且不要在实现中键入任何成员/变量。如果可能,您应该使用接口进行键入。映射类型的实例成员如果未初始化,则将始终为空。在这种情况下,您应该对代码进行如下重新表述
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;
}
}
公共类ngramodel
{
私有地图;
公共ngramodel(){
ngram=newhashmap();
ngram.put(“aa”,2);
}
公共映射getValue(){
返回ngram;
}
}
并且不要在实现中键入任何成员/变量。如果可能的话,您应该使用接口进行键入。您正在构造函数中隐藏您的实例变量。@zouzu这是答案,您不想在大文本区域中写入它吗?抱歉,我没有完全理解。@user2758935读到:@hgoebl/Aarowaim太懒了,无法写入:)继续!您正在构造函数中隐藏您的实例变量。@Zouzu这是答案,您不想在大文本区域中写入它吗?很抱歉,我没有完全理解它。@user2758935读到:@hgoebl/Aarowaim太懒了,无法写入:)继续!