什么是 NoSuchMethod 错误,我该如何解决?

Posted

技术标签:

【中文标题】什么是 NoSuchMethod 错误,我该如何解决?【英文标题】:What is a NoSuchMethod error and how do I fix it? 【发布时间】:2021-12-24 19:10:24 【问题描述】:

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

NoSuchMethod:方法 'XYZ' 在 null 上被调用

这是什么意思,我该如何解决?

【问题讨论】:

这应该是一个规范的欺骗目标。见meta.***.com/questions/401321/…。随意改进 Q 或 A。 在不了解 Flutter/Dart 的情况下,我猜这相当于 What is a NullReferenceException, and how do I fix it? @TylerH 这是正确的 它实际上与它没有任何关系,除了那个人也有这个错误。如何解决它的解决方案在这里的答案中。 我认为标题包含 NoSuchMethodError 而不是 NoSuchMethod error,与日志中的显示方式相同 【参考方案1】:

为什么会出现这个错误?

示例

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

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

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

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

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

技术说明

您正在尝试使用null 的变量。要么您已将其显式设置为null,要么您根本没有设置它,默认值为null

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

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

我该如何解决?

找到它

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

修复它

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

【讨论】:

以上是关于什么是 NoSuchMethod 错误,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

java pinyougou nosuchmethod exception

在 Android SDK 23 中使用 Apache HttpClient。NoSuchMethod

我可以在颤振中的 **noSuchMethod()** 方法中使用啥参数来处理空快照数据?

ssh框架整合-NoClassDefFoundError-NoSuchMethodError-遁地龙卷风

什么是未定义的引用/未解决的外部符号错误,我该如何解决?

什么是未定义的引用/未解决的外部符号错误,我该如何解决?