如果我在代表
javax.lang.model.util.Types#directSupertypes(TypeMirror)
的 TypeMirror
上调用 int
,则生成的 List
为空。
Java 语言规范 表示
int
的直接超类型是 long
。因此,由于该方法被记录为返回所提供的 TypeMirror
的直接超类型,我本来期望一个 List
由一个元素组成(一个 PrimitiveType
代表 long
)。
就像您之前关于类型系统迂腐的问题一样,对此没有有趣的答案。
出于方法解析的目的,
int
是long
的子类型,即,如果您调用foo(someInt)
,其中someInt
是int
类型的表达式,并且唯一可用的方法是void foo(long x)
,那么这将被调用。将 int 和 long 翻转过来就不会了。
Java 语言规范规定 int 的直接超类型是 long。
不,JLS 说 int 的直接超类型是 long 在方法解析的上下文中。
实际上并没有这么说。其目的是表达“这应该是显而易见的”。正如证据 A 所“证明”的那样:...
Types.directSupertypes
的行为。
directSupertypes
的javadoc直接引用了JLS的§4.10。
在某些时候“询问SO”是一个奇怪的举动。如果您发现这种迂腐的断开连接令人反感,您应该向 openJDK 团队提交错误。我之前已经提交过有关规格错误的错误。它已在下一版本的文档中修复。