gpt4 book ai didi

java - 用 ByteBuddy 替换字节码中出现的类型

转载 作者:行者123 更新时间:2023-12-01 09:07:23 25 4
gpt4 key购买 nike

ByteBuddy 是否可以替换字节码中出现的某种类型?例如如果我有课

class MyClass {
Foo makeFoo() {
return new Foo();
}
}

我想转换此类的字节码,使其等效于

class MyClass {
Bar makeFoo() {
return new Bar();
}
}

我。 e.将所有出现的 Foo 替换为 Bar

最佳答案

正如 Holger 所说,这不在 Byte Buddy 试图实现的范围内。 Byte Buddy 尝试为代码操作提供一个安全的环境,在您的情况下,它需要验证 BarFoo 的有效替代品。此外,它还需要重新计算堆栈映射帧,这是相当昂贵的。

如果您想使用 Byte Buddy,它提供对底层 ASM 的访问。 ASM优惠Remapper你可以用它来做这样的事情。如果您只想这样做,您可能应该考虑使用不带 Byte Buddy 的 ASM。正如 Holger 在他的评论中提到的,最有效的方法是重写常量池条目,它是 ASM 不支持的 Foo 的根引用,所以你甚至可能想找到另一种方法,即使简单的 ASM 访问不会产生太多开销。

关于java - 用 ByteBuddy 替换字节码中出现的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41159342/

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