我试图在某个类图中围绕类生成运行时包装器,但是当图中有一个循环时,我不知道如何处理这种情况。 想象一下,A类有一个B类型的字段,但B类有一个A类字段。我想生成类A'和B'所以A级'有一个B'和B'有一个A'类型的字段。 在Byte Buddy中,方法" defineField"可以接收TypeDefinition类型的参数。我认为必须有一种方法可以为尚未定义的类型定义TypeDefinition,但我还没有找到它。
答案 0 :(得分:0)
您可以使用TypeDescription.Latent
定义此类字段,但风险自负。 Byte Buddy将此视为一个特定的,未经验证的用例,因为考虑到相互依赖性,类型重定义非常复杂。
确保在正确定义潜在类型之前不加载类型。此外,您可能需要通过DynamicType.Unloaded
方法将这两种类型合并为一个include
。此外,您应该注意,如果有问题的VM急切地验证注入的类型,ClassLoadingStrategy.Default.INJECT
策略可能不起作用。由于您一次只能注入一种类型,因此在循环类型定义中,注入第一种类型时至少会丢失一种类型。考虑使用不受此限制的ClassLoadingStrategy.Default.WRAPPER
策略。
这就是说,你可以毫无问题地做到这一点,但你可以体验VerifierError
你通常承诺不会经历的事情。