java - 将非空键和值放入哈希表时出现 NullPointerException

标签 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)
为什么会出现这个异常?我该如何解决?

最佳答案

你还没有初始化你的Hashtable:-

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

when neither of the arguments to put() are null

您应该使用HashMap,它允许1 个空键,以避免在使用put 时得到NPE使用 null key,在 Hashtable 的情况下抛出 NPE 的方法,因为它不允许 null 键或值.

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

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

甚至更好:-

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

作为旁注,您应该在代码中遵循 Java 命名约定。所有的类名和接口(interface)名,都应该以UpperCase字母开头,之后是CamelCasing

关于java - 将非空键和值放入哈希表时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13566270/

相关文章:

java - 维度 2 的自定义对象数组的初始化

c++ - 具有两个键的哈希表

java - 如何通过字节缓冲区写入对象?

java - 我怎样才能给 JRuby 打补丁来给它一个伪文件系统?

java - JSF 和 ManagedBean : NullPointerException

java - 在 Java 中比较 String 参数时出现 NullPointerException

c# - 除了方法在 linq 中如何工作

java - 哈希表中的数据被覆盖

java - 在 Java 中测试简单的信号量使用

java - 具有泛型和 Comparable 的接口(interface)和类