什么是 NoSuchMethod 错误,我该如何解决?

What is a NoSuchMethod error and how do I fix it?

我有一些代码,当我 运行 它产生一个错误,说:

NoSuchMethod: the method 'XYZ' was called on null

这是什么意思,我该如何解决?

为什么会出现此错误?

例子

作为现实世界的对比,刚刚发生的是这段对话:

Hey, how much gas is left in the tank of the car?

What are you talking about, we don't have a car.

这正是您的程序中发生的事情。你想调用一个像 _car.getGasLevel(); 这样的函数,但是 没有车 ,变量 _carnull.

显然,在您的程序中它可能不是汽车。它可以是列表或字符串或其他任何东西。

技术说明

您正在尝试使用 null 变量。要么您已明确将其设置为 null,要么您根本就没有设置它,默认值为 null.

像任何变量一样,它可以传递给其他函数。您收到错误的地方可能不是源头。您必须根据实际 null 值的线索找到它最初的来源,找出问题所在以及可能的解决方案。

null 可以有不同的含义:未设置为另一个值的变量将是 null,但有时程序员会故意使用 null 值来表示没有值。数据库有可为空的字段,JSON 有缺失值。丢失的信息可能确实 信息本身。例如,变量 bool userWantsPizzaForDinner; 可能用于 true 当用户说是时, false 当用户拒绝时,它可能仍然是 null 当用户尚未选择时某物。这不是错误,它是有意使用的,需要相应地处理。

我该如何解决?

找到它

使用错误消息附带的堆栈跟踪来准确找出错误发生在哪一行。然后在该行设置一个断点。当程序遇到断点时,检查变量的所有值。其中之一是null,找出是哪一个。

修复它

一旦你知道它是哪个变量,找出它最终是如何变成 null 的。它从哪里来的?这个值是不是一开始就没有设定的?该值是另一个变量吗? that 变量是如何获得它的值的。这就像一行面包屑,您可以一直跟踪,直到到达某个点,您发现某个变量从未设置过,或者您可能到达某个点,您发现某个变量被有意设置为 null。如果它是无意的,只需修复它。将其设置为您希望它具有的值。如果是故意的,那么您需要在程序中进一步处理它。也许您需要另一个 if 来为这种情况做一些特别的事情。如有疑问,您可以询问故意将其设置为 null 的人,他们想要达到什么目的。