Java “NoSuchMethodError”

2022-09-01 13:49:00

我得到:

NoSuchMethodError: com.foo.SomeService.doSmth()Z

我是否正确地理解这意味着doSmth()方法的返回类型是布尔值?如果为 true,则这种方法实际上不存在,因为此方法返回一些 Collection。但另一方面,如果我调用此方法,我不会将其返回值分配给任何变量。我只是这样调用这个方法:'Z'

service.doSmth();

任何想法为什么会发生这个错误?所有必需的 JAR 文件都存在,并且此类中的所有其他方法似乎都存在。


答案 1

在编译期间,方法似乎存在于类路径中,但在应用程序运行期间不存在。

我不认为返回类型是一个问题。如果是这样,它就不会编译。当方法调用不明确时,编译器会引发错误,而当两个方法仅因返回类型而异时,编译器会引发错误。


答案 2

通常,编译器会捕获此错误;仅当类的定义发生不兼容更改时,此错误才会在运行时发生。

简而言之 - 运行时的类/jar 文件与编译时使用的类/jar 文件不同。


推荐