Class
を使用して動的にクラスをロードしてオブジェクトを取得したとしますClass.forName("Foo")
。Foo
この場合は抽象的であるため、呼び出すことはできませんnewInstance()
。(どのように) の具体的なサブクラスを宣言することは可能Foo
ですか?
1 に答える
1
抽象的ではないと宣言します。
class Bar extends Foo {
// implement methods are required.
}
つまり、クラスを動的にロードしたからといって、ルールが変更されるわけではありません;)
Foo はコンパイル時に利用できません
コンパイル時に Foo が利用できない場合でも、このクラスを作成するための具象であるこのクラスのサブクラスが必要です。これを行うには、2 つのオプションがあります。
- 具体的なクラスを見つけて作成します。Reflectionsライブラリを使用して、そのようなクラスを見つけることができます。
- コードを生成し、コンパイラ API または BeanShell を使用してコンパイルします。
- ObjectWeb の ASM を使用してサブクラスのバイト コードを生成します。
サブクラスが提供されていない限り、抽象メソッドのコードを生成する必要があるため、最初のオプションが必要だと思います。
于 2012-12-06T14:48:35.810 に答える