我知道我们可以从.class文件加载一个对象,我的问题是如何做到相反。 我使用Class.forName("classname")
来获得一个Class对象,我怎样才能把它写回.class文件? 序列化类不是这个问题的关键,因为加载的文件可能不是实现Serializable接口。如何将Class对象写回.class文件?
我问这个问题的原因是我需要将Class对象转换为java源文本字符串。如果有人知道如何直接将Object类转换为源代码,这可能会很有帮助。
我知道我们可以从.class文件加载一个对象,我的问题是如何做到相反。 我使用Class.forName("classname")
来获得一个Class对象,我怎样才能把它写回.class文件? 序列化类不是这个问题的关键,因为加载的文件可能不是实现Serializable接口。如何将Class对象写回.class文件?
我问这个问题的原因是我需要将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();
}
}
你是问有关反编译的东西吗?在采取.class文件,并获得.java“等效”? – Austin
http://java.decompiler.free.fr/ –
如果奥斯汀是正确的,那么你可以去许多免费的工具,可以将.class文件转换成.java..ex DJ(DJ Java Decompiler).. – Rajesh