我知道我们可以从 .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();
}
}