我知道我们可以从.class文件加载一个Object,我的问题是如何反向执行。
我使用Class.forName("classname")
来获取一个Class对象,我该如何将它写回.class文件?
序列化类不是此问题的关键,因为加载的文件可能不是实现Serializable接口。
我之所以要问这个是我需要将Class对象转换为java源文本字符串。如果有人知道如何直接将Object类转换为源代码,那么它可能会非常有用。
答案 0 :(得分:1)
如果你想将函数等添加到你可以使用的类中。
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();
}
}