tangguo

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

java

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


阅读 268

收藏
2020-12-02

共1个答案

一尘不染

您可以使用定义这样的字段,TypeDescription.Latent但这需要您自担风险。字节伙伴将其视为特定的,未经验证的用例,因为考虑到相互之间的依赖关系,类型重新定义非常复杂。

在正确定义潜在类型之前,请确保未加载类型。另外,您可能需要DynamicType.Unloaded通过include方法将两种类型组合为一个类型。此外,您应注意,ClassLoadingStrategy.Default.INJECT如果所讨论的VM急切地验证了注入的类型,则该策略可能不起作用。由于您一次只能注入一个类型,因此在圆形类型定义中,在注入第一个类型时至少会丢失一种类型。考虑使用ClassLoadingStrategy.Default.WRAPPER不受此限制的策略。

VerifierError就是说,您可以做到这一点而没有任何问题,但是您可以体验到通常被保证不会经历的事情。

2020-12-02