我有以下代码:
RoomCell r = b.GetRoomCellAt(1, 2);
assertTrue(r.isDoorway());
第二行因空指针异常而失败,就好像 r 没有被实例化一样。但我将它设置为等于该方法检索的单元格,所以它显然不为空。
为什么我可能会收到此错误?
我有以下代码:
RoomCell r = b.GetRoomCellAt(1, 2);
assertTrue(r.isDoorway());
第二行因空指针异常而失败,就好像 r 没有被实例化一样。但我将它设置为等于该方法检索的单元格,所以它显然不为空。
为什么我可能会收到此错误?
你的完整堆栈跟踪是什么?需要它来确定以下哪一项是原因:
GetRoomCellAt 可能找不到值并返回 null
GetRoomCellAt 的实现可能会访问一个空指针
isDoorway 的实现可能访问了一个空指针
仅供参考,使用 @Nullable 注释来注释参数和返回类型是一种很好的做法
该函数GetRoomCellAt()
可能仍然可以返回NULL
。
if(r != null)
{
assertTrue(r.isDoorway());
}
代替
assertTrue(r.isDoorway());
b.GetRoomCellAt(1, 2);
此单元格可能为空。所以只有你得到nullPointerException
你得到 a 的唯一方法NullPointerException
是 if is r
Indeed null
。您可以将它放在您的测试条件中,以确保如果r
实际上是 null
,那么测试将失败:
RoomCell r = b.GetRoomCellAt(1, 2);
assertNotNull(r);
assertTrue(r.isDoorway());
如果r
是null
,那么测试会提前失败,并且您会避免 NPE。