我注意到 eclipse JDT用作void
原始类型。这可以被认为是正确的吗?
7 回答
我发现,在这种情况下,您无法超越 Java 语言规范。很清楚这void
不是原始的事实。
首先,void
不在原始类型列表中。后来,JLS 明确指出:
Java 编程语言不允许“强制转换为 void”—— void 不是类型 http://java.sun.com/docs/books/jls/third_edition/html/statements.html#5989(强调我的)
此外,void
出现在关键字列表中,而不是文字列表中。
Michael Borgwardt很好地解释了你看到你所做的事情的原因。
所以,回答你的标题:不。在 Java 中,void
不能被视为原语。回答您的问题:是的,Eclipse JDT 代码对于它需要做的事情是正确的。
没有 void 不是原始类型。它只是一个关键字,表示方法没有返回值。最接近的是 java.lang.Void 类,Javadocs 中将其描述为:
Void 类是一个不可实例化的占位符类,用于保存对表示 Java 关键字 void 的 Class 对象的引用。
JDT 中的存在仅仅是为代码构建 AST。如果您查看同一文档中的字段值描述,它会说:
原始类型“void”的类型代码。请注意,“void”的特殊之处在于它唯一的合法用途是作为方法返回类型和类型文字。
从您的链接:
请注意,“void”的特殊之处在于它唯一的合法用途是作为方法返回类型和类型文字。
另请注意,这是一个与 AST 节点有关的类,即 Java 语言的语法。
基本上,在对语言语法进行建模时,void
与原始类型出现在一些相同的地方,因此当将语法表示为 Java 类时,您必须对其进行类似的分类。
来自 Java 6 API 文档:
public boolean isPrimitive() - 确定指定的 Class 对象是否代表原始类型。
返回: true 当且仅当此类表示原始类型
我检查了自己:
void.class.getName() // void (OK)
void.class.isPrimitive() // true (??)
Void.class.getName() // java.lang.Void (OK)
Void.class.isPrimitive() // false (OK)
是错误吗?我知道 void不是原始类型(我认为它只是关键字),但为什么 void.class.isPrimitive() 返回 true ?
编辑:我认为应该澄清,所以我建议 java:doc bug 7019906。在我看来应该是:
public boolean isPrimitive() - 确定指定的 Class 对象是表示原始类型还是关键字 void。
返回: 当且仅当此类表示原始类型或关键字 void时,返回 true 。
据我所知, void 它不是原始类型。然而,出于反思的原因,他们在 Type 类中有这个常量!
这是您引用的javadoc中写的内容:
原始类型“void”的类型代码。请注意,“void”的特殊之处在于它唯一的合法用途是作为方法返回类型和类型文字。
注意粗体字。我认为这解释了一切。