Java:字节码的新实例

时间:2010-11-23 17:41:08

标签: java reflection assembly bytecode java-bytecode-asm

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

我想从bytes数组创建新的类实例。我该怎么做呢?它有可能吗?

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:2)

这是可能的,您需要使用Reflection才能实现此目的。伪代码是:

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);
}

答案 2 :(得分:0)

我可以通过扩展ClassLoader和使用defineClass来创建类。但是后来创建的类将我的扩展ClassLoader作为其ClassLoader,当我的类的代码加载其他类时会导致失败。据推测,我可以通过创建我的ClassLoader以正确的方式委托一切来解决这个问题,但是如何做到这一点并不明显。