Java 为什么';该代码是否正确检查接口?
我以为这段代码会将一个对象添加到适当的向量中,但我得到了一个空指针异常。我知道Java 为什么';该代码是否正确检查接口?,java,interface,vector,instanceof,Java,Interface,Vector,Instanceof,我以为这段代码会将一个对象添加到适当的向量中,但我得到了一个空指针异常。我知道Actor a存在,因为actors.add(a)按预期工作。我研究了如何测试对象是否实现了接口,但是我能找到的所有示例都详细说明了如何调用接口的方法,而不是调用需要该接口实例的方法 public void addActor(Actor a) { actors.add(a); // actors is a vector if (a instanceof Drawable) { panel
Actor a
存在,因为actors.add(a)
按预期工作。我研究了如何测试对象是否实现了接口,但是我能找到的所有示例都详细说明了如何调用接口的方法,而不是调用需要该接口实例的方法
public void addActor(Actor a) {
actors.add(a); // actors is a vector
if (a instanceof Drawable) {
panel.addDrawable((Drawable) a);
}
}
在小组中:
public void addDrawable(Drawable d) {
images.add(d); // images is a vector
}
我得到一个空指针异常。我知道Actor a
存在,因为actors.add(a)
按预期工作
Vector.add(null)
不会引发NullPointerException
。警察说
公共布尔包含(对象o)
如果此向量包含指定元素,则返回true
。更正式地说,当且仅当此向量包含至少一个元素e,使得(o==null?e==null:o.equals(e))
时,返回true
你可以很好地将null添加到向量中。我不知道问题是什么——你所说的“调用接口的方法而不是调用需要该接口实例的方法”是什么意思?你得到的NPE唯一可能的地方是(如果你说你是积极参与者,那么
panel.addDrawable((可绘制)a);
行必须是它。面板
必须为空,除非您没有向我们显示其他代码。向我们显示异常本身会很好。请显示NPE.Oh.Dang中的stacktrace。谢谢。但现在我只使用addActor(new Square())调用它;
,所以我不明白这到底是怎么回事。当我删除引用接口的代码并添加System.out.println测试时,一切看起来都正常。@Techni,如果NPE的顶层堆栈使用该方法,则actors
或panel
为null
。