2

我已经成功实现了reflectionEquals 方法,其中包含一个排除字段的列表。

return  EqualsBuilder.reflectionEquals(this, obj, new String[] {"files", "notes", "status"});

但是,我最近在 Java 1.5 上编译了我的程序,现在当程序遇到上述行时出现以下错误:

java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder.= reflectEquals(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/String;)Z

如果有人了解为什么该方法在运行时不存在,我将不胜感激

4

3 回答 3

8

我曾经遇到的每个 NoSuchMethodError (最终)都被发现是编译时类路径上的外部库版本与运行时类路径上的库版本之间的不匹配(即 - 在这种情况下,编译应用程序时,您的类路径上的 apache commons 版本将与运行时不同。)

当您的代码被编译时,该方法肯定存在 - 否则会引发编译器错误。

检查你的类路径上的 commons-lang.jar 的版本——我打赌你会发现不匹配的。

值得注意的是,这不是MISSING jar文件——它会抛出 ClassNotFoundException(可能最终会出现 NoClassDefFoundError。)

于 2009-05-14T18:53:33.450 回答
1

这可能是一个 var args 问题。确保在 java 1.5 中重新编译所有内容,并确保在 java 1.5 上运行它,并确保在编译时引用与运行时相同的 jar。

于 2009-05-14T18:07:44.650 回答
0

您的运行时类路径中可能有旧版本。

获取最新版本的Apache Commons Lang

于 2009-05-14T17:30:45.880 回答