Supponiamo che nella mia JVM sia presente una classe caricata Class<C> myClass
. Esiste un modo affidabile per chiedere alla JVM il codice di bytecode di .class? Cioè qualcosa di simile:Ottieni bytecode dalla classe caricata
<C> byte[] getClassBytecode(Class<C> myClass) {
return /* the contents of the .class resource where C was loaded from */;
}
(ovviamente un InputStream
sarebbe buono come il byte[]
). So che posso usare myClass.getResource()
(e gli amici) per recuperare il file di classe, ma martellando sul nome della classe per ottenere un URL da inviare a getResource è sbagliato. Inoltre, non sono sicuro di come si comporterebbe nel caso in cui sia stato generato dinamicamente C
(ad esempio utilizzando javax.tools.JavaCompiler
).
Qualche idea (migliore)?
nota: l'obiettivo è quello di essere in grado di spingere il bytecode classi per una JVM diversa e utilizzare un programma di caricamento classe personalizzata per caricare loro ci
si prega di dare un'occhiata a: http://commons.apache.org/proper/commons-bcel/ – ogzd
http://stackoverflow.com/questions/4130903/java-getting-bytecode-of-class -at-runtime-from-the-same-jvm e http://stackoverflow.com/questions/2737285/is-there-a---to-obtain-the-bytecode-for-a-class-at -runtime – assylias