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 以正确的方式委派所有内容来解决这个问题,但如何做到这一点并不明显。

于 2011-01-08T20:47:22.477 回答