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