2013-10-03 86 views
0

我有以下代碼:我不明白這個NullPointerException異常

RoomCell r = b.GetRoomCellAt(1, 2); 
assertTrue(r.isDoorway()); 

第二行與一個空指針異常失敗,因爲如果R沒有被實例化。但是我將它設置爲等於該方法檢索的單元格,因此它顯然不爲空。

爲什麼我可能會得到這個錯誤?

+0

正如你所說,因爲'r' **是'null' **。 –

+0

b.GetRoomCellAt(1,2)必須返回null。檢查方法文檔的來源... – Thihara

+0

,因爲'b.GetRoomCellAt(1,2);'返回空 –

回答

2

函數GetRoomCellAt()可能仍然可以返回NULL

3

什麼是您的完整堆棧跟蹤?這是必要的,以確定哪些以下是原因:

這有可能是GetRoomCellAt沒有找到值並返回null

這有可能是GetRoomCellAt實施訪問一個空指針

這有可能是isDoorway實施訪問一個空指針

僅供參考,它是使用@Nullable進行註解參數和返回類型

+0

+1使我閱讀了關於'@ Nullable'註釋。快速谷歌搜索導致我http://stackoverflow.com/questions/14076296/nullable-annotation-usage :) – icedwater

+0

如果你使用Eclipse,你現在得到內置的可空分析(儘管你可能不得不打開它)。話雖如此,我經常發現番石榴的選擇性更有效。 – Uri

0
好習慣

代替

assertTrue(r.isDoorway()); 


b.GetRoomCellAt(1, 2); 

該細胞可以爲空。所以只有你得到nullPointerException

0

你會得到一個NullPointerException的唯一方法是如果r確實是null。你可以把這個在您的測試條件,以確保如果r實際上null,那麼會導致測試失敗:

RoomCell r = b.GetRoomCellAt(1, 2); 
assertNotNull(r); 
assertTrue(r.isDoorway()); 

如果rnull,那麼測試的早期失敗,並且避免了NPE。