关于泛型:为什么java.lang.reflect.WildcardType类返回上限和下限的数组?

Why does the java.lang.reflect.WildcardType class return arrays for the upper and lower bounds?

最近,我读了很多关于Java泛型的文章,因为我要开始一个很大程度上依赖于这些机制和公共反射API允许访问它们的项目。但在我看来,这有点矛盾:

Note, a wildcard can have only one bound. In can neither have both an upper and a lower bound nor several upper or lower bounds. Constructs such as" ? super Long extends Number" or " ? extends Comparable & Cloneable" are illegal.

(http://www.angelikalanger.com/genericsfaq/faqsections/typearguments.html faq102;节通配符界限)

因此,通配符总是只有一个界限(如果忽略与每个下限通配符一起使用的上限"对象")。但是,如果您查看对应的反射API类WildcardType,这似乎不是全部的事实:

为什么API只提供getLowerBounds()getLowerBounds()函数,为什么它们返回一个数组?是否存在返回长度至少为2的数组的情况?


我目前可用的资料来源(1.8.0_172)包含以下"内部"评论:

1
2
// one or many? Up to language spec; currently only one, but this API
// allows for generalization.

因此,似乎API是为将来可能允许多个边界的情况而设计的。

编辑:

这里有一个1.8.0_来源的链接,显示这个评论仍然存在。(以下是OpenJDK 10.0.2的相同链接)

为什么不需要这种概括呢?假设您稍后会更改API,并且所有现有代码都需要从Type更改为Type[],那么您需要添加新的方法,从而很难解释为什么有两种方法。