我已经成功实现了reflectionEquals方法,其中包含一个排除字段列表。
return EqualsBuilder.reflectionEquals(this, obj, new String[] {"files", "notes", "status"});
但是,我最近在Java 1.5上编译了我的程序,现在当程序遇到上述行时出现以下错误:
java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder。= reflectionEquals(Ljava /郎/对象; Ljava /郎/对象; [Ljava /郎/字符串;)z
如果有人了解该方法在运行时不存在的原因,我将不胜感激
答案 0 :(得分:8)
我遇到过的每个NoSuchMethodError(最终)都发现编译时类路径上的外部库版本与运行时类路径上的库版本不匹配(即 - 在这种情况下,在编译应用程序时,在类路径上将有一个不同版本的apache commons,而不是在运行时。)
当您的代码被编译时,该方法肯定存在 - 或者抛出了编译器错误。
检查类路径上的commons-lang.jar的版本 - 我打赌你会发现不匹配。
值得注意的是,不 MISSING jar文件 - 会抛出ClassNotFoundException(最终可能会出现NoClassDefFoundError。)
答案 1 :(得分:1)
这可能是一个var args问题。确保在java 1.5中重新编译所有内容并确保在java 1.5上运行它,并确保在编译时引用与运行时相同的jar。
答案 2 :(得分:0)
您的运行时类路径上可能有旧版本。
获取最新版本的Apache Commons Lang