【问题标题】:Why doesn't this code check for the interface correctly?为什么这段代码不能正确检查接口?
【发布时间】:2012-06-14 21:20:51
【问题描述】:

我认为这段代码会将一个对象添加到适当的向量中,但我得到了一个空指针异常。我知道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
}

【问题讨论】:

  • 你可以在向量中添加空值。
  • 我不知道问题是什么——“调用接口的方法而不是调用需要该接口实例的方法”是什么意思?
  • 你得到的 NPE 唯一可能的地方是(如果你说你是积极的演员 a 不为空,那么panel.addDrawable((Drawable) a); 行必须是它。panel必须为 null,除非您没有向我们展示其他代码。向我们展示异常本身会很好。
  • 请显示来自 NPE 的堆栈跟踪。

标签: java interface vector instanceof


【解决方案1】:

我得到一个空指针异常。我知道Actor a 存在,因为actors.add(a) 正在按预期工作。

Vector.add(null) 不会引发NullPointerExceptionjavadoc

public boolean contains(Object o)

如果此向量包含指定元素,则返回 true。更正式地说,当且仅当此向量包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时,才返回 true。

【讨论】:

  • 哦。当。谢谢。但现在我只用addActor(new Square()); 调用它,所以我不明白这可能是什么问题。当我删除引用接口的代码并添加 System.out.println 测试时,一切看起来都在工作。
  • @Techni,如果您的 NPE 的顶部堆栈在该方法中,则 actorspanelnull
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
相关资源
最近更新 更多