如何使用asm或javassist动态修改类的超类

时间:2018-05-25 03:02:07

标签: java-bytecode-asm javassist

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

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

1 个答案:

答案 0 :(得分:0)

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

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

Here是此方法的文档:

  

public void setSuperclass(CtClass clazz)                      抛出CannotCompileException

     

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

     

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