【问题标题】:How to dynamic modify super classes of a class using asm or javassist如何使用 asm 或 javassist 动态修改类的超类
【发布时间】:2018-05-25 03:02:07
【问题描述】:

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

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

【问题讨论】:

  • “修改一个类的超类”是什么意思?你想真正修改超类还是只修改类的声明以指向另一个类作为它的超类?
  • 很抱歉给您带来了困惑,我只是想修改类的声明,使其指向另一个类作为其超类

标签: java-bytecode-asm javassist


【解决方案1】:

你应该看看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 附加到列表中 由该接口扩展的超级接口。请注意,一个 interface 可以扩展多个超级接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多