2012-06-14 86 views
0

我認爲這段代碼會添加一個對象到適當的向量,但我得到一個空指針異常。我知道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 
} 
+4

您可以向矢量添加null就好了。 –

+1

我不知道問題是什麼 - 通過「調用接口的方法而不是調用需要該接口的實例的方法」的含義是什麼? –

+1

你得到的NPE唯一可能的地方是(如果你說你是積極的Actor a不是null,那麼'panel.addDrawable((Drawable)a);'就行了。面板'必須爲空,除非有其他的代碼,你沒有向我們展示,顯示我們的例外本身將是很好的 – Austin

回答

1

我得到一個空指針異常。我知道Actor a存在,因爲actors.add(a)按預期工作。

Vector.add(null)不會引起NullPointerException。該javadoc

public boolean contains(Object o)

返回true如果此向量包含指定的元素。更正式地說,當且僅當這個向量包含至少一個元素e以使得(o==null ? e==null : o.equals(e))返回真。

+0

哦,當然,謝謝。用'addActor(new Square())'調用它,'',所以我沒有看到這可能是真正的問題,而當我刪除引用接口的代碼並添加System.out.println測試時,一切看起來像是 – ChemicalRocketeer

+1

@Techni,如果NPE的頂層堆棧在該方法中,那麼'actors'或'panel'都是'null'。 –

相關問題