Java 我不知道';我不理解这个NullPointerException
我有以下代码:Java 我不知道';我不理解这个NullPointerException,java,Java,我有以下代码: RoomCell r = b.GetRoomCellAt(1, 2); assertTrue(r.isDoorway()); 第二行失败,出现空指针异常,就好像r没有被实例化一样。但我将它设置为该方法检索的单元格,因此它显然不是null 为什么可能会出现此错误?函数GetRoomCellAt()可能仍然返回NULL函数GetRoomCellAt()可能仍然返回NULL您的完整堆栈跟踪是什么?需要确定以下哪一项是原因: GetRoomCellAt可能找不到值并返回null Get
RoomCell r = b.GetRoomCellAt(1, 2);
assertTrue(r.isDoorway());
第二行失败,出现空指针异常,就好像r没有被实例化一样。但我将它设置为该方法检索的单元格,因此它显然不是null
为什么可能会出现此错误?函数
GetRoomCellAt()
可能仍然返回NULL
函数GetRoomCellAt()
可能仍然返回NULL您的完整堆栈跟踪是什么?需要确定以下哪一项是原因:
GetRoomCellAt可能找不到值并返回null
GetRoomCellAt的实现可能访问空指针
isDoorway的实现可能访问空指针
仅供参考,使用@Nullable注释来注释参数和返回类型是一种很好的做法您的完整堆栈跟踪是什么?需要确定以下哪一项是原因:
if(r != null)
{
assertTrue(r.isDoorway());
}
GetRoomCellAt可能找不到值并返回null
GetRoomCellAt的实现可能访问空指针
isDoorway的实现可能访问空指针
仅供参考,使用@Nullable注释对参数和返回类型进行注释是一种很好的做法
if(r != null)
{
assertTrue(r.isDoorway());
}
而不是
assertTrue(r.isDoorway());
b.GetRoomCellAt(1, 2);
此单元格可能为空。因此,只有您才能获得nullPointerException
而不是
assertTrue(r.isDoorway());
b.GetRoomCellAt(1, 2);
此单元格可能为空。因此,只有您才能获得nullPointerException
获得nullPointerException
的唯一方法是如果r
确实是null
。您可以将其放入测试条件中,以确保如果r
实际为null
,则测试将失败:
RoomCell r = b.GetRoomCellAt(1, 2);
assertNotNull(r);
assertTrue(r.isDoorway());
如果r
为null
,那么测试会提前失败,您可以避免NPE。获得null点异常的唯一方法是r
确实为null
。您可以将其放入测试条件中,以确保如果r
实际为null
,则测试将失败:
RoomCell r = b.GetRoomCellAt(1, 2);
assertNotNull(r);
assertTrue(r.isDoorway());
如果r
为null
,那么测试会提前失败,您可以避免NPE。正如您所说,因为r
为null
。b.GetRoomCellAt(1,2)必须返回null。检查方法docs o source…因为b.GetRoomCellAt(1,2)
返回null或是因为r.isDoorway
中的某个字段是null
。正如您所说,因为r
是null
。b.GetRoomCellAt(1,2)必须返回null。检查方法docs o source…因为b.GetRoomCellAt(1,2)
返回null或,因为r.isDoorway
中的某个字段是null
+1,以便让我阅读@Nullable
注释。一个快速的谷歌搜索让我想到:)如果你使用Eclipse,你现在会得到内置的空性分析(尽管你可能需要打开它)。也就是说,我经常发现番石榴的可选成分更有效。+1让我阅读了@Nullable
注释。一个快速的谷歌搜索让我想到:)如果你使用Eclipse,你现在会得到内置的空性分析(尽管你可能需要打开它)。也就是说,我经常发现番石榴的选择更有效。