什么是NoSuchMethodError?我该如何修复它



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

NoSuchMethod:方法"XYZ"是在空上调用的

这意味着什么?我该如何修复它?

为什么会出现此错误

示例

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

嘿,汽车油箱里还剩多少汽油?

你在说什么,我们没有汽车。

这正是您的程序中正在发生的事情。您想调用类似_car.getGasLevel();的函数,但没有car,变量_carnull

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

技术说明

您正试图使用一个null变量。要么你已经明确地将它设置为null,要么你根本没有设置它,默认值是null

与任何变量一样,它也可以传递到其他函数中。您得到错误的地方可能不是来源。您必须遵循从实际null值到其最初来源的线索,以找到问题所在以及可能的解决方案

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

我该如何修复它

找到它

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

修复它

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

简单地说,您试图从类访问的变量/函数不存在

someClass.xyz();

以上将给出错误

NoSuchMethod: the method 'xyz' was called on null

因为类别CCD_ 19不存在

以下内容将适用于

// 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();
}

相关内容

  • 没有找到相关文章

最新更新