我有一些代码,当我运行它时会产生一个错误,说:
NoSuchMethod:在 null 上调用了方法“XYZ”
这是什么意思,我该如何解决?
我有一些代码,当我运行它时会产生一个错误,说:
NoSuchMethod:在 null 上调用了方法“XYZ”
这是什么意思,我该如何解决?
作为一个现实世界的比较,刚刚发生的是这样的对话:
嘿,汽车的油箱里还剩多少油?
你在说什么,我们没有车。
这正是您的程序中正在发生的事情。你想调用一个函数,_car.getGasLevel();
但是没有 car,变量_car
是null
.
显然,在您的程序中,它可能不是汽车。它可以是一个列表或一个字符串或其他任何东西。
您正在尝试使用null
. 要么您已将其显式设置为null
,要么您根本没有设置它,默认值为null
.
像任何变量一样,它可以传递给其他函数。你得到错误的地方可能不是源头。您将不得不从实际null
值到其最初来源的线索,找出问题所在以及解决方案可能是什么。
null
可以有不同的含义:未设置为另一个值的变量将是null
,但有时程序员故意使用空值来表示没有值。数据库有可为空的字段,JSON 有缺失值。缺失的信息可能确实是信息本身。例如,该变量bool userWantsPizzaForDinner;
可能用于true
用户说是false
时、用户拒绝null
时以及用户尚未选择某物时。这不是一个错误,它是故意使用的,需要相应地处理。
使用错误消息附带的堆栈跟踪来准确找出错误在哪一行。然后在该行上设置一个断点。当程序遇到断点时,检查变量的所有值。其中之一是null
,找出哪一个。
一旦你知道它是哪个变量,找出它是如何结束的null
。它从哪里来的?价值是否一开始就没有设定?值是另一个变量吗?该变量是如何获得它的价值的。这就像一行面包屑,您可以一直跟踪,直到您发现某个变量从未设置过,或者您可能会发现某个变量被故意设置为null
. 如果它是无意的,只需修复它。将其设置为您希望它具有的值。如果这是故意的,那么您需要在程序中进一步处理它。也许你需要另一个if
来为这种情况做一些特别的事情。如果有疑问,您可以询问故意将其设置为null
他们想要实现的目标的人。