1
A
回答
3
我假设你正在使用ClassAdapter各位代表几乎所有的ClassWriter也可来电visitField添加新字段添加字段。
如果将要添加的字段初始化为常量。然后,您可以直接将对象文字提供给ClassVisitor.visitField。
如果要添加的字段需要复杂的静态初始化,那么您需要覆盖ClassAdapter.visitMethod检查<clinit>
方法并创建一个自定义MethodAdapter,以添加所需的代码。代码的粗略草图如下:
class MyAdapter extends ClassAdapter {
public MyAdapter(ClassVisitor delegate) {
super(delegate);
}
@Override
public MethodVisitor visitMethod(int access, String name,
String desc, String signature, String[] exceptions) {
MethodVisitor r = super.visitMethod(access, name, desc, signature, exceptions);
if ("<clinit>".equals(name)) {
r = new MyMethodAdapter(r);
}
return r;
}
class MyMethodAdapter extends MethodAdapter {
MyMethodAdapter(MethodVisitor delegate) {
super(delegate);
}
@Override
public void visitCode() {
super.visitCode();
// build my static initializer by calling
// visitFieldInsn(int opcode, String owner, String name, String desc)
// or the like
}
}
}
0
你应该能够只覆盖visitField
在ClassVisitor
相关问题
- 1. 静态初始化程序中的Task.Run
- 2. Kotlin的静态初始化程序块
- 3. Java中的静态初始化程序和静态方法
- 4. 静态初始化的Java序列化
- 5. 初始化静态块中的线程?
- 6. 静态初始化
- 7. 如何使用ASM为初始化程序添加静态最终字段?
- 8. 静态HashMap的初始化
- 9. Spring的静态初始化
- 10. 静态初始化顺序的悲剧
- 11. 静态变量的初始化顺序
- 12. 静态块VS中的静态变量初始化顺序
- 13. 静态变量初始化顺序
- 14. C++静态初始化顺序
- 15. 静态成员java初始化顺序
- 16. 静态初始化数组?
- 17. 静态初始化INT
- 18. 静态属性初始化
- 19. 静态变量初始化
- 20. 静态初始化C++
- 21. 静态变量初始化
- 22. 初始化静态结构
- 23. 静态字段初始化
- 24. 静态对象初始化
- 25. PHP静态初始化器
- 26. 初始化静态向量
- 27. 静态ImmutableArray未初始化
- 28. 初始化静态变量
- 29. 静态初始化混淆
- 30. 静态变量初始化