Я хотел бы создать реализацию во время выполнения для абстрактного класса с использованием Byte Buddy, и я столкнулся с проблемой, что java.lang.AbstractMethodError
выдается при вызове метода из созданного экземпляра. У меня есть такой существующий класс abstract
(который я на самом деле не могу изменить и который на самом деле содержит больше логики):
public abstract class Algorithm {
abstract int execute();
}
Используя следующий минимальный образец, я хотел бы, чтобы мой экземпляр Algorithm
возвращал постоянное значение:
Class<?> type = new ByteBuddy()
.subclass(Algorithm.class)
.method(ElementMatchers.named("execute"))
.intercept(FixedValue.value(42))
.make()
.load(classLoader, ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
Algorithm instance = (Algorithm) type.newInstance();
System.out.println(myInstance.execute());
Однако это приводит к следующему исключению:
Exception in thread "main" java.lang.AbstractMethodError: package.Algorithm.execute()I
(когда я экспериментально меняю Algorithm
на interface
, все работает нормально, но это не решает мою конкретную проблему).