为什么当给定 int 原始类型时 directSupertypes(TypeMirror) 返回空列表?

问题描述 投票:0回答:1

如果我在代表

javax.lang.model.util.Types#directSupertypes(TypeMirror)
TypeMirror
上调用
int
,则生成的
List
为空。

Java 语言规范 表示

int
的直接超类型是
long
。因此,由于该方法被记录为返回所提供的
TypeMirror
的直接超类型,我本来期望一个
List
由一个元素组成(一个
PrimitiveType
代表
long
)。

java annotation-processing jls javax.lang.model
1个回答
0
投票

就像您之前关于类型系统迂腐的问题一样,对此没有有趣的答案。

出于方法解析的目的,

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 团队提交错误。我之前已经提交过有关规格错误的错误。它已在下一版本的文档中修复。

© www.soinside.com 2019 - 2024. All rights reserved.