我知道我们可以从 .class 文件加载一个对象,我的问题是如何反向执行。我Class.forName("classname")
用来获取 Class 对象,如何将其写回 .class 文件?序列化类不是这个问题的重点,因为加载的文件可能没有实现 Serializable 接口。
我问这个的原因是我需要将 Class 对象转换为 java 源文本字符串。如果有人知道如何将 Object 类直接转换为源代码,那可能会很有帮助。
我知道我们可以从 .class 文件加载一个对象,我的问题是如何反向执行。我Class.forName("classname")
用来获取 Class 对象,如何将其写回 .class 文件?序列化类不是这个问题的重点,因为加载的文件可能没有实现 Serializable 接口。
我问这个的原因是我需要将 Class 对象转换为 java 源文本字符串。如果有人知道如何将 Object 类直接转换为源代码,那可能会很有帮助。
如果您想将功能等添加到可以使用的类中。
http://www.jboss.org/javassist
例子:
clazz = fullclass name, method = "public void doxxx(){ int x =0;x++}"
private static void createMethod(String clazz,String method){
ClassPool pool = ClassPool.getDefault();
try {
Class<?> class1 = Class.forName(clazz);
class1.getProtectionDomain().getCodeSource().getLocation();
pool.insertClassPath(new ClassClassPath(class1));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
CtClass pt;
try {
pt = pool.get(clazz);
CtMethod m = CtNewMethod.make(method, pt);
pt.addMethod(m);
pt.writeFile();
pt.toClass();
} catch (NotFoundException e) {
e.printStackTrace();
} catch (CannotCompileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}