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

What is the ByteBuddy recipe for building an upper-bounded wildcard?

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

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

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

显然,如果我想制作 Supplier<Frob<X>>,我可以这样做:

TypeDescription.Generic.Builder.parameterizedType(TypeDescription.ForLoadedType.of(Supplier.class),
                                                  myTypeDefinition)
  .build();

…假设我在上面的代码片段中没有出现任何拼写错误。

如何从现有的 TypeDefinition 中创建一个上限通配符 TypeDefinition 以作为参数化类型构建的“参数化”部分提供?是否有明显的方法我忽略了,或者这是构建器 DSL 中的一个缺口?

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

(我正在寻找一种方法来做 TypeDescription.Generic.Builder.parameterizedType(myTypeDefinition).asWildcardUpperBound().build(),但我显然做不到。)

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

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