byte-buddy - 构建上限通配符的 ByteBuddy 配方是什么?
问题描述
我知道其中的一些,但不是全部。最值得注意的是,我知道TypeDescription.Generic.Builder
但我有一个非常具体的问题。
假设我要构建Supplier<? extends Frob<X>>
.
进一步假设我所知道的只是TypeDefinition
参数的 a,但我不知道它代表什么(在上面的示例中它代表Frob<X>
)。也就是说,我不知道TypeDefinition
我拥有的是类、参数化类型、泛型数组类型、类型变量、通配符还是其他任何东西;我只知道它是一个TypeDefinition
.
显然,如果我想制作Supplier<Frob<X>>
,我可以这样做:
TypeDescription.Generic.Builder.parameterizedType(TypeDescription.ForLoadedType.of(Supplier.class),
myTypeDefinition)
.build();
…假设我没有在上面的代码段中输入任何拼写错误。
如何从适合作为参数化类型构建的“参数化”部分提供TypeDefinition
的现有通配符中制作上限通配符?TypeDefinition
有没有我忽略的明显配方,或者这是构建者的 DSL 中的一个差距?
(我知道asWildcardUpperBound()
on 的方法TypeDescription.Generic.Builder
,但是假设我有一个构建器可以使用,并且为了“引导”这样一个构建器,我TypeDescription
至少需要给它一个。但我没有TypeDescription
; 我有一个TypeDefinition
可能被参数化的,我不想使用asErasure()
。)
(我正在寻找一种方法TypeDescription.Generic.Builder.parameterizedType(myTypeDefinition).asWildcardUpperBound().build()
,但我显然不能这样做。)
似乎确实有,TypeDescription.Generic.OfWildcardType.Latent::boundedAbove
但我不知道这是否应该是“仅供内部使用”的类/方法。
解决方案
确实缺少这样的 API。我在今天的版本 (1.11.5) 中添加了一个 API,用于将现有的泛型类型描述转换为允许转换为数组或通配符的构建器。APITypeDescription.Generic.Builder.of
接受加载或卸载的泛型类型描述。
推荐阅读
- java - 如何使用 IntStream 将 String 和 Integer 元素放入 LinkedHashMap?
- html - 如何使文本溢出多行,其中最后一行有省略号而不仅仅是第一行?
- c++ - 由于在 C++ 范围内查找完美正方形时出现超时错误而终止
- owl - 通过 HermiT 的 Protege 中的 SubClassOf 和 EquivalentTo 了解推理的差异
- java - JPA坚持在级联孩子时插入不正确的id值
- r - 将字母显示为 geom_text 图例的关键字形,而不是默认的“a”
- scala - sbt 发布到 Maven 中心失败,没有公钥错误
- python - 为多个 python 应用程序重用 Docker 映像
- java - Hadoop API 在尝试初始化集群以使用 DistCp 时抛出错误
- javascript - 如何在 php 的 restful api 中嵌入 Javascript 函数?