Javaコンパイラが異なるファイルの別のクラスへの参照を解決するには、クラスパス上にある必要があります。Javaクラスローダーはメソッド本体を検証しますか?
クラスパスにクラスが見つからないか、メソッドのシグネチャが一致しない場合、いくつかの例外がスローされます。
しかし、メソッドの実装に関して、コンパイル時のクラスパスと実行時のクラスパスを比較する検証はありますか?
どうすればいいですか?コンパイル時に異なるものに実装されたメソッドシグネチャをclasspathに指定するとどうなりますか?
には検証エラーまたはいずれかの例外はありませんスローされますか?それは非常に安全ではないようです。
いいえ。 APIが変更されない限り、実行時に実装をスワップできます。たとえば、マイナーリリース間でlog4jをアップグレードしても、アプリケーションを再コンパイルする必要はありません。 –
さて、彼らは同じパッケージに入っている必要がありますが、あなたはそれらを置き換えることができます。あなたはそれを機能として見ることができます。 classpathに指定されている順番でクラスがロードされている(または少なくとも古いバージョンのJavaである)ので、バグの実装を置き換えるためにこれを使用しました。また、ライブラリのアップグレードもサポートしています。 – KevinO
それは強力なもののようですが、非常に危険です。あなたはサーバー上の誰かのクラスファイルを変更することができ、彼はそれをまったく気付かないでしょう:D。 – user3364192