dart 什么是NoSuchMethodError以及如何修复它?

xghobddn  于 2023-03-16  发布在  其他
关注(0)|答案(2)|浏览(139)

我有一些代码,当我运行它产生一个错误,说:
无此类方法:对null调用了方法“XYZ”
这是什么意思?我该如何修复它?

brgchamk

brgchamk1#

为什么会出现此错误?

示例

作为真实的世界的比较,刚才发生的是这样一段对话:
嘿,汽车油箱里还有多少油?
你在说什么,我们没有车。
这正是你的程序所发生的事情,你想调用一个类似_car.getGasLevel();的函数,但是 there is no car,变量_carnull
显然,在你的程序中,它可能不是一辆车,它可能是一个列表、一个字符串或其他任何东西。

技术说明

您正在尝试使用变量null。如果您已将其显式设置为null,或者根本没有设置它,则默认值为null
像任何变量一样,它可以被传递给其他函数。您得到错误的地方可能不是错误的来源。您必须从实际的null值到它最初来自的地方,找到问题所在和解决方案。
null可以具有不同的含义:变量没有被设置为另一个值将是null,但有时空值被程序员故意使用来表示没有值。数据库有可空字段,JSON有缺失值。缺失信息可能确实是信息本身。例如变量bool userWantsPizzaForDinner;可能在用户说是的时候被用于truefalse,当用户拒绝时,它可能仍然是null,当用户还没有选择某个东西时。这不是错误,它是故意使用的,需要相应地处理。

我该如何修复它?

找到它

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

搞定它

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

y0u0uwnf

y0u0uwnf2#

只是您尝试从类访问的变量/函数不存在

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

相关问题