参数化类型的直接超类型集合是否包含自身?基于JLS11规范的疑问
问题解答
这并非JLS的有意设计,属于规范条文的表述疏漏。
直接超类型的核心语义本身就隐含严格非自反属性:它指代类型继承层次中与当前类型紧邻的上级类型,任何类型都不可能是自身的直接超类型。
你推导时用到的参数化类型直接超类型规则,省略了一个必要的前置限制:至少有一个位置的Si与Ti不相等。
- 规则中列出的「Si包含Ti」是基础条件,结合直接超类型的语义,隐含排除了参数化类型完全等同于当前类型的场景
- 「包含」关系的自反性(
T <= T)是为通配符匹配等场景设计的,本身就不是用于支撑直接超类型的自反推导
目前所有JDK的类型系统实现都没有采用「参数化类型是自身直接超类型」的逻辑,也印证了这属于规范的表述歧义,而非有意安排。
内容的提问来源于stack exchange,提问作者Laird Nelson
相关产品推荐
相关产品推荐

