Я использую Javassist для создания некоторых классов во время выполнения, и когда я создаю анонимные внутренние классы в этих классах, они падают при попытке создать экземпляр окружающего объекта (насколько я могу судить)
Я попытался реализовать простейшую версию того, что я пытаюсь сделать.
Я определяю 3 класса следующим образом:
public class A {
public int method() {
return 1;
}
}
public class B extends A {
}
public class C extends A {
public int method() {
return 5;
}
}
Что я хочу сделать сейчас, так это использовать javassist (или что-то еще, я думаю), чтобы (во время выполнения) создать класс, который имеет все функциональные возможности C, но расширяет B вместо A, мне это кажется вещью, которая была бы хорошо, так как B расширяет A. В настоящее время я делаю это следующим образом:
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get(C.class.getName());
cc.setName("newName");
cc.setSuperclass(cp.get(B.class.getName()));
B b = (B) cc.toClass().newInstance();
b.method();
Приведенный выше код отлично работает, когда я вызываю метод(), но если я создаю экземпляр анонимного внутреннего класса в методе C() следующим образом:
public class C extends A {
public int method() {
try {
return new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return 5;
}
}.call();
} catch (Exception e) {
return 2;
}
}
}
когда я звоню method()
, я получаю java.lang.NoSuchMethodError: C$1.<init>(LnewName;)
ошибку.