プログラムで2つの外部jarライブラリを使用しています。 外部ライブラリX
にあるクラスが、というクラスのメソッドm
を呼び出しています。ライブラリX
は、ライブラリY
のバージョン1.0でコンパイルされました。しかし、私のコードではライブラリY
を他の目的のために使用しているので、私はその最後のバージョン(5.0としましょう)を使用することをお勧めしました。 私の問題は、コードを実行すると、ライブラリX
は、メソッドm
がもう存在しない(NoSuchMethodエラーをスローする)ことに文句を言います。しかし、その方法はそこにあります。NoSuchMethodエラーが、それ以降のバージョンのJARファイルを使用しようとしています
問題は、コンパイル時に存在していたより新しいバージョンのライブラリY
を使用しているという事実に関連している可能性がありますか? (下位互換性はありますが、別のバイトコードとは互換性があります)。もしそうなら、私はJavaメソッド呼び出しが直接参照(例:オフセット)ではなくシンボリックリファレンス(例えばメソッドシグネチャ)としてバイトコードで表現されていると思ってから少し混乱しますが、私は誤解を招く可能性があります何か。
ありがとうございます。
署名は非常に微妙に変化しました。元のバージョンのメソッドはパラメータとして 'int'を持ち、新しいバージョンでは 'long'です。私は「適合する」方法がまだ存在していることを確認しているに過ぎず、「正確な」方法はまだ存在していないことを認識していませんでした。ありがとう。 – Sergio
@Sergio:ようこそ。コンパイラが静かに処理するもの、つまり明示的なJVMサポートなしで暗黙的な変換、共変リターンなどを見落とすのは簡単です。 – ruakh