![](/img/trans.png)
[英]Java NullPointerException when traversing a non-null recordset
[英]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>()
此外, 这篇文章对于您是否想要Hashtable
或HashMap
可能很有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.