当 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/