提问人:nvoigt 提问时间:9/24/2020 最后编辑:nvoigt 更新时间:10/12/2023 访问量:4549
什么是 NoSuchMethodError,如何修复它?
What is a NoSuchMethodError and how do I fix it?
问:
我有一些代码,当我运行时它会产生一个错误,说:
NoSuchMethod:在 null 上调用了方法“XYZ”
这是什么意思,我该如何解决?
答:
为什么会出现此错误?
例
作为现实世界的比较,刚刚发生的是这样的对话:
嘿,汽车油箱里还剩多少油?
你在说什么,我们没有车。
这正是您的程序中正在发生的事情。你想调用一个函数,比如,但没有汽车,变量是。_car.getGasLevel();
_car
null
显然,在您的程序中,它可能不是汽车。它可以是一个列表或一个字符串,或者其他任何东西。
技术说明
您正在尝试使用一个变量,即 。要么您已将其显式设置为 ,要么根本无法设置它,则默认值为 。null
null
null
与任何变量一样,它可以传递到其他函数中。出现错误的地方可能不是源。您必须遵循从实际值到最初来源的线索,以找到问题所在以及解决方案可能是什么。null
null
可以有不同的含义:未设置为另一个值的变量将是 ,但有时程序员故意使用 null 值来表示没有值。数据库具有可为 null 的字段,JSON 具有缺失值。缺失的信息可能确实是信息本身。例如,该变量可用于用户说“是”时、用户拒绝时以及用户尚未选择某些内容时。这不是一个错误,它是故意使用的,需要相应地处理。null
bool userWantsPizzaForDinner;
true
false
null
我该如何解决?
找到它
使用错误消息附带的堆栈跟踪来准确找出错误所在的行。然后在该行上设置断点。当程序命中断点时,检查变量的所有值。其中之一是,找出是哪一个。null
修复它
一旦你知道它是哪个变量,就找出它是如何最终成为 的。它是从哪里来的?这个值从一开始就没有设定过吗?该值是另一个变量吗?这个变量是如何得到它的值的。这就像一行面包屑,你可以遵循,直到你到达一个点,你发现某个变量从未被设置过,或者你到达一个点,你发现一个变量被故意设置为 。如果是无意的,只需修复它。将其设置为您希望它具有的值。如果是故意的,那么你需要在程序中进一步处理它。也许你需要另一个人为这种情况做一些特别的事情。如有疑问,您可以询问故意将其设置为他们想要实现的目标的人。null
null
if
null
只是您尝试从类访问的变量/函数不存在:
someClass.xyz();
以上将给出错误
NoSuchMethod: the method 'xyz' was called on null
因为该类不存在。someClass
以下操作将正常工作:
// SomeClass created
// SomeClass has a function xyz
class SomeClass {
SomeClass();
void xyz() {
print('xyz');
}
}
void main() {
// Create an instance of the class
final someClass = SomeClass();
// Access the xyz function
someClass.xyz();
}
评论
someClass
null
上一个:选择其他表中不存在的行
评论
NoSuchMethodError
NoSuchMethod error