2 回答
TA贡献1871条经验 获得超13个赞
我们使用 ASM 为 Saxon XSLT/XQuery 处理器生成字节码,生成已知抽象类的子类是我们通常做事的方式。我不会假装这很容易,我没有时间给你写教程,很遗憾我不能发布我们的代码,但我可以向你保证这是可能的。我认为您不必为覆盖方法做任何特别的事情。
我们有一个类 Generator,它继承了 ASM 的 GeneratorAdapter。
我们使用以下内容创建类:
String className = "xxx" + compiler.getUniqueNumber();
ClassVisitor cv = new ClassWriter(flags);
cv.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null,
"com/saxonica/ee/bytecode/iter/CompiledBlockIterator", new String[]{});
// CompiledBlockIterator is the superclass name
// generate constructor
Method m = Method.getMethod("void <init> ()");
Generator ga = new Generator(Opcodes.ACC_PUBLIC, m, false, cv);
ga.loadThis();
ga.invokeConstructor(Type.getType(CompiledBlockIterator.class), m);
ga.returnValue();
ga.endMethod();
然后继续以相同的方式生成其他方法。
添加回答
举报