将非null键和值放入Hashtable时出现NullPointerException

时间:2012-11-26 13:53:06

标签: java nullpointerexception hashtable

当put()的参数都不为null时,java.util.Hashtable的空指针异常在以下代码中出现:

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();
  }
}

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

2 个答案:

答案 0 :(得分:4)

您尚未初始化Hashtable: -

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

当put()的参数都不为空时

您应该使用允许HashMap的{​​{1}}来避免在1 null key使用NPE put时获取null keyHashtable方法NPE 1}}抛出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字母开头,然后跟随{{1}}。

答案 1 :(得分:1)

callfunc引用为null而不是输入。

试试这个:

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

另外this帖子可能对您是否需要HashtableHashMap

有用