gpt4 book ai didi

java - Byte Buddy - 处理生成的类中的循环引用

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:32 27 4
gpt4 key购买 nike

我正在尝试围绕某些类图中的类生成运行时包装器,但我不知道当图中存在循环时如何处理这种情况。想象一下,有一个类 A 有一个类型 B 的字段,但类型 B 有一个类型 A 的字段。我想生成类 A' 和 B',以便类 A' 有一个类型 B' 的字段,而类 B' 有一个类型 A' 的字段。在 Byte Buddy 中,方法“defineField”可以接收 TypeDefinition 类型的参数。我认为一定有一种方法可以为尚未定义的类型定义 TypeDefinition,但我还找不到它。

最佳答案

您可以使用 TypeDescription.Latent 定义此类字段,但这需要您自担风险。 Byte Buddy 将此视为特定的、未经验证的用例,因为考虑到相互依赖性,类型重新定义非常复杂。

确保在正确定义潜在类型之前不加载类型。此外,您可能需要通过 include 方法将这两种类型合并为一个 DynamicType.Unloaded。此外,您应该注意,如果相关虚拟机急切地验证注入(inject)的类型,则 ClassLoadingStrategy.Default.INJECT 策略可能不起作用。由于一次只能注入(inject)一种类型,因此在循环类型定义中,在注入(inject)第一种类型时,至少会缺少一种类型。考虑使用不受此限制的 ClassLoadingStrategy.Default.WRAPPER 策略。

也就是说,您可以毫无问题地执行此操作,但您可能会遇到 VerifierError 这是您通常 promise 不会遇到的情况。

关于java - Byte Buddy - 处理生成的类中的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094448/

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