关于泛型的JLS是不完整的,您还发现了另一个漏洞。类型变量的下限几乎没有讨论,并且在规范上
X对上限
Number和下限都没有任何限制
Runnable。他们可能忽略了它。
直观上,必须至少存在一个同时满足类型变量上限和下限的可能类型,否则该变量以及使用该变量的所有类型将无用。由于这几乎肯定是编程错误,因此编译应该失败。
很容易检查上限和下限是否构成了一组空的类型。下界的所有超类型都是已知的;至少其中一个应该是上限,否则两个范围内都没有类型。
-
这两种
Foo<? extends A>情况在规范中都有很好的定义。随着采集转换,我们有新的变量类型
X有上限
A &Number,并规范说为上限
V1&...&Vm
如果对于Vi和Vj中的任何两个类(不是接口),Vi不是Vj的子类,反之亦然,则是编译时错误。
因此,如果A = Thread,捕获转换将失败。



