我有以下代码:
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 rIndeed null。您可以将它放在您的测试条件中,以确保如果r实际上是 null,那么测试将失败:
RoomCell r = b.GetRoomCellAt(1, 2);
assertNotNull(r);
assertTrue(r.isDoorway());
如果r是null,那么测试会提前失败,并且您会避免 NPE。