我有以下代码:
RoomCell r = b.GetRoomCellAt(1, 2);
assertTrue(r.isDoorway());
第二行失败并出现空指针异常,就好像r尚未实例化一样。但我将它设置为该方法检索的单元格,因此它显然不为空。
为什么我可能会收到此错误?
答案 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。