gpt4 book ai didi

java - Rebase方法拦截,完全重写方法

转载 作者:行者123 更新时间:2023-12-02 12:36:55 24 4
gpt4 key购买 nike

我正在尝试使用 ByteBuddy 进行一些运行时代码更改。我遇到的问题是,当我尝试对方法进行 rebase 以在末尾添加拦截调用时,整个方法会被替换,并且之后没有声明和调用任何 $original() 方法。

这是我用于正确转换的代码

ByteBuddy()
.rebase(clazz)
.method(ElementMatchers.named("onEnable"))
.intercept(MethodDelegation.to(TestInjector()))
.make()
.saveIn(dataFolder)

clazz 和 dataFolder 是在上面定义的,并不是问题的根源。

这是注入(inject)器方法的签名:

public void拦截(@This JavaPlugin pl)

在分析其输出的代码时,该类与转换前相同,但在 onEnable 方法中调用的所有代码已被删除,并替换为单个方法委托(delegate)。有没有一种方法,使用这样的方法,让我保留现有的方法主体,但在方法的头部添加委托(delegate)调用?

最佳答案

如果要调用原始方法,可以使用“andThen”将 SuperMethodCall 链接到拦截器。这指示 Byte Buddy 在委托(delegate)调用后调用原始方法。

关于java - Rebase方法拦截,完全重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45119026/

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