我想在运行时使用 Byte Buddy 为抽象类创建一个实现,但我遇到了一个问题,即java.lang.AbstractMethodError
从创建的实例调用方法时会抛出 a 。我有一个像这样的现有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
,一切正常,但这并不能解决我的具体问题)。