8
ClassWriter cw = new ClassWriter(...);
byte[] bytes = cw.toByteArray();

bytes配列から新しいクラス インスタンスを作成したいと思います。どうすればいいですか?それはまったく可能ですか?

4

3 に答える 3

8
ClassLoader.defineClass()

参照:

于 2010-11-23T17:45:21.780 に答える
2

これは可能であり、これを実現するにはリフレクションを使用する必要があります。疑似コードは次のとおりです。

final Class clazz = loadIntoCurrentClassLoader(bytes); //I'm assuming you wrote this already using defineClass

final YourClass foo ;
try {
    foo = (YourClass) clazz.newInstance();
}
catch (final Exception e) {
    throw new RuntimeException(e);
}
于 2010-11-23T17:48:25.667 に答える
0

ClassLoader を拡張し、defineClass を使用してクラスを作成できます。しかし、作成されたクラスには拡張された ClassLoader が ClassLoader として含まれているため、クラスのコードが他のクラスをロードするときにエラーが発生します。おそらく、ClassLoader を作成してすべてを正しい方法で委任することで、これを回避できると思いますが、これを正しく行う方法は明らかではありません。

于 2011-01-08T20:47:22.477 に答える