0

我有以下代码:

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

第二行因空指针异常而失败,就好像 r 没有被实例化一样。但我将它设置为等于该方法检索的单元格,所以它显然不为空。

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

4

4 回答 4

3

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

GetRoomCellAt 可能找不到值并返回 null

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

isDoorway 的实现可能访问了一个空指针

仅供参考,使用 @Nullable 注释来注释参数和返回类型是一种很好的做法

于 2013-10-03T02:45:14.103 回答
2

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

于 2013-10-03T02:44:32.667 回答
0
if(r != null)
{
  assertTrue(r.isDoorway());
}

代替

assertTrue(r.isDoorway());


b.GetRoomCellAt(1, 2); 

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

于 2013-10-03T02:45:34.777 回答
0

你得到 a 的唯一方法NullPointerException是 if is rIndeed null。您可以将它放在您的测试条件中,以确保如果r实际上 null,那么测试将失败:

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

如果rnull,那么测试会提前失败,并且您会避免 NPE。

于 2013-10-03T03:05:53.187 回答