在Java中,"void "可以被认为是一种基元类型吗?

问题描述 投票:13回答:7

我注意到eclipse JDT 用途 void 作为基元类型. 这能算是正确的吗?

java eclipse void eclipse-jdt
7个回答
15
投票

我发现,在这样的情况下,你不能不去看Java语言规范。它很清楚地说明了这样一个事实 void 并不是一个原始人。

首先。void 不在 基元类型列表. 后来,JLS明确指出。

Java编程语言不允许 "投向虚空"... ... void不是一种类型 http:/java.sun.comdocsbooksjlsthird_editionhtmlstatements.html#5989。 (重点是我)

此外: void 见于 关键词列表,而不是文言文列表。

理由 你看到你所做的是 善解人意 迈克尔-博格沃特写的

所以,回答你的标题:不是。在Java中。void 不能被认为是一个基元。回答你的正文:是的,Eclipse JDT代码是正确的,它需要做什么。


8
投票

没有void不是一个基元类型。它只是一个关键字,用来表示一个方法没有返回值。最接近的是java.lang.Void类,从Javadocs中描述为。

Void类是一个不可更改的占位符类,用来保存对代表Java关键字void的Class对象的引用。

在JDT中的存在只是为了构建代码的AST。如果你看同一文档中的字段值描述,它说。

"void "这个基元类型的类型代码. 请注意,"void "是特殊的,它唯一合法的用途是作为方法返回类型和作为类型文字。


3
投票

从Java 6 API文档:

公共布林 isPrimitive() - 确定指定的Class对象是否代表一个基元类型。

返回:如果并且 唯有 该类代表 基本型

我自己检查了一下。

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?

edit:我觉得应该澄清一下,所以我建议java:doc中的 bug 7019906. 在我看来,它应该是。

public boolean isPrimitive() - 确定指定的Class对象是否代表一个基元类型。或关键字void.

如果且仅如果这个类代表一个基元类型,则返回:true。或关键字void.


2
投票

从你的链接中。

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

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

基本上,在对语言语法进行建模时。void 和基元类型出现在一些相同的地方,所以当把语法表示为一个Java类时,你必须把它归类。


0
投票

据我所知,void它不是一个基元类型。然而,出于反射的原因,他们在类Type中加入了这个常量!


0
投票

这里是你所引用的javadoc中的内容。

"void "这个基元类型的类型代码. 注意,"void "是 特殊 因为它的唯一合法用途是作为方法返回类型和类型文字。

请注意粗体字。我想这已经解释了一切。


0
投票

我看到你们经常争论这个问题,但是... ...

嘿,伙计们,在java.lang.Class中,有一个名为isPrimitive()的函数。

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

enter image description here

另外,Void.TYPE是用Class.getPrimitiveClass("void")得到的。

所以事实很清楚,void就是基元。

enter image description here

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