繁体   English   中英

将非空键和值放入Hashtable时发生NullPointerException

[英]NullPointerException when putting a non-null key and value into a Hashtable

当put()的两个参数都不为null时,以下代码中发生java.util.Hashtable的null指针异常:

import java.util.Hashtable;

interface action
{
   void method();
}

class forclass implements action
{
  public void method()
  {
    System.out.println("for(...){");
  }
}

class ifclass implements action
{
  public void method()
  {
    System.out.println("if(..){");
  }
}

public class trial
{
  static Hashtable<String,action> callfunc;
  //a hashtable variable
  public static void init()
  {
    //System.out.println("for"==null); //false
    //System.out.println(new forclass() == null); //false
    callfunc.put("for",new forclass()); //exception occuring here
    callfunc.put("if",new ifclass());
    //putting values into the hashtable
  }
  public static void main(String[] args)
  {
    init(); //to put stuff into hashtable
    action a = callfunc.get("for");
    //getting values for specified key in hashtable
    a.method();
    callfunc.get("if").method();
  }
}

线程“主”中的异常java.lang.NullPointerException-
在trial.init(trial.java:33)
在trial.main(trial.java:38)
为什么会发生这种异常? 我如何解决它?

您尚未初始化Hashtable :-

static Hashtable<String,action> callfunc; // Reference points to null

当put()的两个参数都不为null时

您应该使用允许1 null key HashMap ,以避免在使用带null key put时获取NPE ,该方法在Hashtable情况下会抛出NPE ,因为它不允许null keys, or value

因此,将您的声明更改为:-

static Hashtable<String,action> callfunc = new Hashtable<String, action>();

甚至更好:-

static Map<String, action> callfunc = new HashMap<String, action>();

附带说明,您应该在代码中遵循Java Naming Convention 所有的类名和接口名都应以UpperCase字母开头,然后跟随CamelCasing

callfunc reference为null而不是输入。

尝试这个:

static Hashtable<String,action> callfunc = new Hashtable<String,action>()

此外, 这篇文章对于您是否想要HashtableHashMap可能很有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM