2

除外されたフィールドのリストを使用して、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/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 に答える