15

我注意到 eclipse JDT用作void原始类型。这可以被认为是正确的吗?

4

7 回答 7

18

我发现,在这种情况下,您无法超越 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 代码对于它需要做的事情是正确的。

于 2011-01-13T15:48:23.397 回答
8

没有 void 不是原始类型。它只是一个关键字,表示方法没有返回值。最接近的是 java.lang.Void 类,Javadocs 中将其描述为:

Void 类是一个不可实例化的占位符类,用于保存对表示 Java 关键字 void 的 Class 对象的引用。

JDT 中的存在仅仅是为代码构建 AST。如果您查看同一文档中的字段值描述,它会说:

原始类型“void”的类型代码。请注意,“void”的特殊之处在于它唯一的合法用途是作为方法返回类型和类型文字。

于 2011-01-13T15:14:04.857 回答
2

从您的链接:

请注意,“void”的特殊之处在于它唯一的合法用途是作为方法返回类型和类型文字。

另请注意,这是一个与 AST 节点有关的类,即 Java 语言的语法。

基本上,在对语言语法进行建模时,void与原始类型出现在一些相同的地方,因此当将语法表示为 Java 类时,您必须对其进行类似的分类。

于 2011-01-13T15:18:12.217 回答
2

来自 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 。

于 2011-02-15T21:19:53.657 回答
0

据我所知, void 它不是原始类型。然而,出于反思的原因,他们在 Type 类中有这个常量!

于 2011-01-13T15:15:29.243 回答
0

这是您引用的javadoc中写的内容:

原始类型“void”的类型代码。请注意,“void”的特殊之处在于它唯一的合法用途是作为方法返回类型和类型文字。

注意粗体字。我认为这解释了一切。

于 2011-01-13T15:20:01.657 回答
-1

我看到你为此争论了很多,但是...

大家好,在 java.lang.Class 中有一个名为 isPrimitive() 的函数

那么我们为什么不用 void 类对象来调用它并得到答案呢?

在此处输入图像描述

此外,Void.TYPE 是使用 Class.getPrimitiveClass("void") 获得的。

所以事实很清楚,void 是原始的。

在此处输入图像描述

于 2020-04-24T13:59:37.127 回答