Как динамически изменять суперклассы класса, чтобы указывать на другой класс в качестве его суперкласса с помощью asm или javassist?
asm
javassist
Я знаю, как изменять методы и поля класса.
Вы должны взглянуть на setSuperclass.Вот небольшой пример:
setSuperclass
CtClass c = pool.getCtClass("com.my.class.A"); c.setSuperclass(pool.getCtClass("com.my.class.B"));
Здесь - документация для этого метода:
public void setSuperclass (CtClass clazz) throws CannotCompileException Изменяет суперкласс, если этот объект не представляет интерфейс.Новый суперкласс должен быть совместим со старым;например, он должен наследовать от старого суперкласса. Если этот объект представляет интерфейс, этот метод эквивалентен addInterface ();он добавляет clazz к списку суперинтерфейсов, расширенных этим интерфейсом.Обратите внимание, что интерфейс может расширять несколько суперинтерфейсов.
public void setSuperclass (CtClass clazz) throws CannotCompileException
Изменяет суперкласс, если этот объект не представляет интерфейс.Новый суперкласс должен быть совместим со старым;например, он должен наследовать от старого суперкласса.
Если этот объект представляет интерфейс, этот метод эквивалентен addInterface ();он добавляет clazz к списку суперинтерфейсов, расширенных этим интерфейсом.Обратите внимание, что интерфейс может расширять несколько суперинтерфейсов.