如何用字节重新键入默认方法



我正在尝试使用ByteBuddyAgent在运行时注释默认方法。为了保持默认实现,我使用的是重新打击策略,但是我不知道如何用调用原始方法拦截新方法。

我尝试使用MethodCall.invokeSuper()MethodCall.invokeSelf().onDefault(),但两者都给我一个IllegalStateException

new ByteBuddy()
.subclass(MyInterface.class)
.method(isDeclaredBy(typeDescription).and(isDefaultMethod()))
    .intercept(MethodCall.invokeSelf().onDefault())
    .annotateMethod(AnnotationDescription.Builder
        .ofType(MyAnnotation.class).build())
.make()
...

您需要使用SuperMethodCall.INSTANCE。这样,字节好友就有机会定位实际的超级方法,即重现方法。

在您的情况下,您只会递归地调用相同的方法。另外,onDefault配置将尝试在MyInterface实现的接口上调用默认方法。

最新更新