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