用于构建上限通配符的 ByteBuddy 配方是什么?

时间:2021-06-17 21:28:05

标签: byte-buddy

我知道一些,但不是全部。最值得注意的是,我知道 TypeDescription.Generic.Builder,但我有一个非常具体的问题。

假设我想构建 Supplier<? extends Frob<X>>

进一步假设我所知道的是参数的 TypeDefinition,但我不知道它代表什么(在上面的例子中它代表 {{1} })。也就是说,我不知道我拥有的 Frob<X> 是类、参数化类型、泛型数组类型、类型变量、通配符还是其他任何东西;我只知道它是一个 TypeDefinition

显然,如果我想制作 TypeDefinition,我可以这样做:

Supplier<Frob<X>>

...假设我在上面的代码片段中没有打错任何字。

如何从现有的 TypeDescription.Generic.Builder.parameterizedType(TypeDescription.ForLoadedType.of(Supplier.class), myTypeDefinition) .build(); 中制作出适合作为参数化类型构建的“参数化”部分提供的上限通配符 TypeDefinition?是否有我忽略的明显配方,或者这是构建者的 DSL 中的差距?

(我知道 TypeDefinition 上的 asWildcardUpperBound() 方法,但这假设我有一个构建器可以使用,为了“引导”这样一个构建器,我需要给它至少有一个 TypeDescription.Generic.Builder。但我没有 TypeDescription;我有一个可能被参数化的 TypeDescription,我不想使用 TypeDefinition .)

(我正在寻找一种方法来做 asErasure(),但我显然不能那样做。)

似乎确实有 TypeDescription.Generic.OfWildcardType.Latent::boundedAbove,但我不知道这是否应该是“仅供内部使用”的类/方法。

1 个答案:

答案 0 :(得分:1)

确实缺少这样的 API。我在今天的版本 (1.11.5) 中添加了一个 API,以将现有的泛型类型描述转换为允许转换为数组或通配符的构建器。 API 是 TypeDescription.Generic.Builder.of,它接受​​加载或卸载的泛型类型描述。

相关问题