Измените объявляющий класс метода с помощью Javassist? - PullRequest
2 голосов
/ 27 мая 2020

Можно ли переместить / скопировать метод из одного класса в другой с помощью Javassist?

public class A {
    public static void test() {
        System.out.println("hello world");
    }
}

public class B {
    // add test() here
}

Что я пробовал:

ctClassB.addMethod(ctClassA.getDeclaredMethod("test"));

Это приводит к исключению: javassist.CannotCompileException: bad declaring class.

Глядя на документацию Javassist, я не верю, что это возможно, но есть ли способ изменить класс объявления метода?

1 Ответ

0 голосов
/ 30 мая 2020

Похоже, что построение нового CtMethod работает:

CtMethod method = ctClassA.getDeclaredMethod("test");
ctClassB.addMethod(new CtMethod(method, ctClassB, null));
...