ClassWriter cw = new ClassWriter(...);
byte[] bytes = cw.toByteArray();
bytes
配列から新しいクラス インスタンスを作成したいと思います。どうすればいいですか?それはまったく可能ですか?
ClassWriter cw = new ClassWriter(...);
byte[] bytes = cw.toByteArray();
bytes
配列から新しいクラス インスタンスを作成したいと思います。どうすればいいですか?それはまったく可能ですか?
これは可能であり、これを実現するにはリフレクションを使用する必要があります。疑似コードは次のとおりです。
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);
}
ClassLoader を拡張し、defineClass を使用してクラスを作成できます。しかし、作成されたクラスには拡張された ClassLoader が ClassLoader として含まれているため、クラスのコードが他のクラスをロードするときにエラーが発生します。おそらく、ClassLoader を作成してすべてを正しい方法で委任することで、これを回避できると思いますが、これを正しく行う方法は明らかではありません。