2016-10-17 10 views
1

いくつかのクラスグラフでクラスの周りにランタイムラッパーを生成しようとしていますが、グラフにサイクルがある場合の対処方法がわかりません。 B型のフィールドを持つクラスAがあるとしますが、B型にはA型のフィールドがあります。クラスA 'にB'型のフィールドがあり、B 'に型があるようにA'とB 'タイプAのフィールド。 Byte Buddyのメソッド "defineField"は、TypeDefinition型のパラメータを受け取ることができます。まだ定義されていないタイプのTypeDefinitionを定義する方法がなければならないと思いますが、まだ見つかりません。Byte Buddy - 生成されたクラスの循環参照の処理

答えて

0

TypeDescription.Latentでこのようなフィールドを定義できますが、これは自己責任で行ってください。 Byte Buddyは、型間の再定義が相互依存性を考えるとかなり複雑であるため、これを特定の未検証のユースケースとして扱います。

潜在型を正しく定義する前に、型をロードしないようにしてください。また、includeメソッドを使用して、2つのタイプを1つのDynamicType.Unloadedに結合する必要があります。さらに、問題のVMが注入型を熱心に検証すると、ClassLoadingStrategy.Default.INJECT戦略が機能しないことに注意してください。あなたが唯一の円形型定義では、一度に1種類を注入することができたように、少なくとも1つのタイプは、常に、注射の時に最初のタイプが失われます。この制限を受けないClassLoadingStrategy.Default.WRAPPER戦略の使用を検討してください。

これは言った、あなたは何の問題もなく、これを行うことができますが、VerifierErrorを体験することができますが、通常はない経験に約束されている何かが何であるかです。