当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)
为什么会发生这种异常?我该如何解决?
答案 0 :(得分:4)
您尚未初始化Hashtable
: -
static Hashtable<String,action> callfunc; // Reference points to null
当put()的参数都不为空时
您应该使用允许HashMap
的{{1}}来避免在1 null key
使用NPE
put
时获取null key
,Hashtable
方法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帖子可能对您是否需要Hashtable
或HashMap