首页 > 解决方案 > 如何使用 asm 或 javassist 动态修改类的超类

问题描述

asm如何动态修改一个类的超类以通过or指向另一个类作为其超类javassist

我知道如何修改类的方法和字段。

标签: java-bytecode-asmjavassist

解决方案


你应该看看setSuperclass。这是一个小例子:

CtClass c = pool.getCtClass("com.my.class.A"); 
c.setSuperclass(pool.getCtClass("com.my.class.B"));

是此方法的文档:

public void setSuperclass​(CtClass clazz) 抛出无法编译异常

除非此对象表示接口,否则更改超类。新的超类必须与旧的兼容;例如,它应该继承自旧的超类。

如果此对象表示一个接口,则此方法等效于 addInterface();它将 clazz 附加到由该接口扩展的超级接口列表中。请注意,一个接口可以扩展多个超级接口。


推荐阅读