0

入力ストリームにクラスの完全なソース コードがあります。Javassist を使用しCtClassてこのクラスの新しいオブジェクトを作成することはできますか?

CtClassクラスの名前を使用して、次のような新しいオブジェクトを作成できることを知っています。

ClassPool.getDefault().makeClass("name_of_the_new_class");

しかし、私の場合、クラスの名前は事前にわかりませんが、完全なソース コードだけです (もちろん、ソース コードを解析してクラスの名前を取得することはできますが、これがクラスの一部であるとは言わないでください)。解決 :-) )

4

1 に答える 1

2

ソースファイルをオンザフライでコンパイルする場合は、ツールAPIとToolProvider.getSystemJavaCompiler()を参照してください。そこから、ソースから.classファイルをコンパイルし、必要に応じてクラスローダーを使用してそれらをロードできます。

次に、Javassistを使用して、新しいClassPoolでByteArrayClassPathを使用して、作成されたクラスファイルのバイトからCtClassを作成することもできます。

于 2011-11-03T01:04:48.100 に答える