8

2 つのクラス A と B があり、B が A を拡張するとします。

class B extends A
{
  ....
}

ただし、私の場合、クラス A は暗号化されており、実行時に ClassLoader によってのみロードできます (コンパイル時に、A.class は暗号化されているため、.class ファイルとして認識できません)。これは、コンパイル時にクラス A が存在しないことを意味します。

私の質問は次のとおりです。

  1. 一部のメソッドはクラス A のメソッドをオーバーライドするため、クラス B のコードをどのように記述できますか?
  2. 実行時にクラス B がクラス A に拡張されるように指定するにはどうすればよいですか?
4

2 に答える 2

8

あなたは反射ですることはできません。しかし、CGLIBとおそらくjavassistでできます

于 2011-05-01T10:09:45.357 に答える
3

オーバーライドしたいすべてのメソッドを含むAのダミーコピーを作成し、Bだけをコンパイルしてデプロイできます。

実行時までオーバーライドするメソッドがわからない場合は、コンパイラAPIを使用してコードを生成する必要がありますが、ObjectwebのASMなどのライブラリの方がはるかに単純である可能性があります。テンプレートから必要なものを生成するコードを簡単に生成できるため、ASMが好きです。つまり、すべてのコードを自分で作成する必要はありません。

于 2011-05-01T11:13:58.633 に答える