我不明白这个NullPointerException

时间:2013-10-03 02:43:37

标签: java

我有以下代码:

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

第二行失败并出现空指针异常,就好像r尚未实例化一样。但我将它设置为该方法检索的单元格,因此它显然不为空。

为什么我可能会收到此错误?

4 个答案:

答案 0 :(得分:3)

你的完整堆栈跟踪是什么?需要它来确定以下哪个是原因:

GetRoomCellAt可能无法找到值并返回null

GetRoomCellAt的实现可能会访问空指针

isDoorway的实现可能会访问空指针

仅供参考,优良作法是使用@Nullable注释来注释参数和返回类型

答案 1 :(得分:2)

函数GetRoomCellAt()可能仍然会返回NULL

答案 2 :(得分:0)

if(r != null)
{
  assertTrue(r.isDoorway());
}

而不是

assertTrue(r.isDoorway());


b.GetRoomCellAt(1, 2); 

此单元格可能为null。所以只有你得到nullPointerException

答案 3 :(得分:0)

如果NullPointerException确实是r,那么获得null的唯一方法就是r。您可以将其置于测试条件中,以确保如果null实际上 RoomCell r = b.GetRoomCellAt(1, 2); assertNotNull(r); assertTrue(r.isDoorway()); ,则测试将失败:

r

如果null为{{1}},则测试会提前失败,您就会避开NPE。