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



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

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

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

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

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

…假设我在上面的片段中没有拼写错误。

我如何从现有的CCD_ 9中生成一个适用于作为"0"提供的上界通配符CCD_;参数化的";参数化类型构建的一部分?有没有一个明显的配方我忽略了,或者这是构建者DSL中的一个缺口?

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

(我在想办法做TypeDescription.Generic.Builder.parameterizedType(myTypeDefinition).asWildcardUpperBound().build(),但显然做不到。(

似乎确实有CCD_ 17,但我不知道这是否应该是一个";仅内部使用";类/方法。

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

最新更新