ClassWriter cw = new ClassWriter(...);
byte[] bytes = cw.toByteArray();
我想從bytes
數組中創建新的類實例。我該怎麼做呢?它有可能嗎?Java:來自字節碼的新實例
ClassWriter cw = new ClassWriter(...);
byte[] bytes = cw.toByteArray();
我想從bytes
數組中創建新的類實例。我該怎麼做呢?它有可能嗎?Java:來自字節碼的新實例
這是可能的,你需要使用反射,以實現這一目標。僞代碼是:
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來以正確的方式委託所有內容來解決這個問題,但不清楚如何正確使用它。
[Java:如何將類存儲爲字節\ [\]到JVM中?](http://stackoverflow.com/questions/1781091/java-how-to-load-class-stored- as-byte-into-the-jvm) – 2010-11-23 17:44:33
@bruno conde:它看起來像。我們只是在這裏以更簡潔的方式表達 – 2010-11-23 17:54:42
您可以使用defineClass,但是除非您使用自定義類加載器,否則您可能需要使用反射來將其稱爲不是公共方法。 – 2010-11-23 22:39:50