用于构建上限通配符的 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
,它接受加载或卸载的泛型类型描述。
我知道一些,但不是全部。最值得注意的是,我知道 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
,它接受加载或卸载的泛型类型描述。