Java: новый экземпляр из байт-кода - PullRequest
7 голосов
/ 23 ноября 2010
ClassWriter cw = new ClassWriter(...);
byte[] bytes = cw.toByteArray();

Я хотел бы создать новый экземпляр класса из bytes массива.Как мне это сделать?Возможно ли это вообще?

Ответы [ 3 ]

8 голосов
/ 23 ноября 2010
2 голосов
/ 23 ноября 2010

Это возможно, и вам нужно использовать 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);
}
0 голосов
/ 08 января 2011

Я могу создать класс, расширив ClassLoader и используя defineClass.Но тогда созданный класс имеет мой расширенный ClassLoader в качестве ClassLoader, который вызывает сбои, когда код моего класса загружает другие классы.Предположительно, я могу обойти это, создав свой ClassLoader для правильного делегирования всего, но не совсем понятно, как это сделать правильно.

...