我使用Java ByteCode的ASM库读取了一个类'方法及其内容。这是在类中输出任何方法的局部变量名称:
ClassReader reader = new ClassReader(new FileInputStream(new File("TheClass.class")));
final ClassNode classNode = new ClassNode();
reader.accept(classNode, 0);
for (final MethodNode mn : (List<MethodNode>)classNode.methods) {
for (LocalVariableNode n : (List<LocalVariableNode>)mn.localVariables) {
System.out.println(n.name);
}
}
这是编译的TheClass
类文件的来源:
public class TheClass {
public final String a;
public final String b;
public TheClass(String c, String d) {
this.b = d;
this.a = c;
}
}
因此,输出逻辑上是this
,c
,d
。 现在,我需要将此编译的类复制到新文件中,但将<init>
方法的参数(局部变量)更改为不同的名称(e
,f
)。我怎么能这样做?我几乎没有使用过MethodVisitors等经验。