gpt4 book ai didi

java - 如何使用 ByteBuddy 对接口(interface)默认方法进行 rebase ?

转载 作者:行者123 更新时间:2023-11-30 10:35:46 25 4
gpt4 key购买 nike

我正在尝试使用 ByteBuddyAgent 在运行时注释默认方法。为了保留默认实现,我使用了 rebase 策略,但我不知道如何通过调用原始方法来拦截新方法。

我尝试使用 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。这样,Byte Buddy 就有机会找到实际的 super 方法,即 rebased 方法。

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

关于java - 如何使用 ByteBuddy 对接口(interface)默认方法进行 rebase ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com