私はこれを試しましたが、呼び出し時に ClassNotFoundException を取得します:
Class.forName("com.AClass", false, mySpecialLoader)
私はこれを試しましたが、呼び出し時に ClassNotFoundException を取得します:
Class.forName("com.AClass", false, mySpecialLoader)
ClassLoader は、クラスを取得するために defineClass を呼び出す必要があります。defineClass の JavaDoc によると:
name が null でない場合、バイト配列で指定されたクラスのバイナリ名と等しくなければなりません。
名前が null の場合、バイトコードから取得します。したがって、com.AClass と呼ばれる限り、任意のクラスを返すことができます。つまり、複数のバージョンの com.AClass を持つことができます。JavaAssist のようなものを使用して、その場でクラスを作成することもできます。
しかし、それは ClassNotFoundException を説明していません - クラスローダーが何も返していないようです。
要求されたものとは異なる名前のクラスを返すことはできません。ただし、ASM などのバイトコード操作ツールを使用して、返すクラスの名前を要求された名前に自動的に変更することができます。