В Java можно ли считать void примитивным типом? - PullRequest
12 голосов
/ 13 января 2011

Я заметил, что Eclipse JDT использует void в качестве примитивного типа . Можно ли это считать правильным?

Ответы [ 6 ]

15 голосов
/ 13 января 2011

Я считаю, что в подобных случаях вы не можете превзойти переход к спецификации языка Java.Совершенно очевидно, что void не является примитивом.

Прежде всего, void отсутствует в списке типов примитивов .Позже JLS явно заявляет:

язык программирования Java не допускает «приведение к пустоте» - void не является типом http://java.sun.com/docs/books/jls/third_edition/html/statements.html#5989 (выделениемой)

Кроме того, void появляется в списке ключевых слов , а не в списке литералов.

причина , чтовы видели, что вы сделали, хорошо объяснил Майклом Боргвардтом.

Итак, чтобы ответить на ваш заголовок: нет.В Java void нельзя считать примитивом.Чтобы ответить на ваш вопрос: да, код Eclipse JDT правильный для того, что он должен делать.

8 голосов
/ 13 января 2011

Нет пустоты, это не примитивный тип.Это просто ключевое слово, указывающее, что метод не имеет возвращаемого значения.Ближайший класс - это java.lang.Void, который из Javadocs описывается следующим образом:

Класс Void - это неисполнимый класс-заполнитель для хранения ссылки на объект Class, представляющий Javaключевое слово void.

Присутствие в JDT просто для создания AST для кода.Если вы посмотрите на описание значения поля в тех же документах, оно говорит:

Введите код для типа примитива "void".Обратите внимание, что «void» является особенным в том смысле, что его единственное допустимое использование - как возвращаемый тип метода и как литерал типа.

3 голосов
/ 16 февраля 2011

Из 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?

edit: Iдумаю, что это нужно уточнить, поэтому я предложил java: ошибка документа 7019906 .По моему мнению, это должно быть:

public boolean isPrimitive () - Определяет, представляет ли указанный объект Class примитивный тип или ключевое слово void .

Возвращает: true тогда и только тогда, когда этот класс представляет примитивный тип или ключевое слово void .

2 голосов
/ 13 января 2011

По вашей ссылке:

Обратите внимание, что "void" является особенным в том смысле, что его единственное допустимое использование - это тип возвращаемого значения метода и литерал типа.

Также обратите внимание, что это класс, связанный с узлами AST, то есть с синтаксисом языка Java.

В основном, при моделировании синтаксиса языка, void появляется в некоторых из тех же мест, что и примитивные типы, поэтому, когдапредставляя синтаксис как класс Java, вы должны классифицировать его аналогично.

0 голосов
/ 13 января 2011

вот что написано в javadoc, на который вы ссылались:

Код типа для примитива типа "void". Обратите внимание, что «void» - это special в том смысле, что его единственное допустимое использование - это тип возвращаемого метода и литерал типа.

Обратите внимание на жирное слово. Я думаю, это все объясняет.

0 голосов
/ 13 января 2011

как я знаю, void это не примитивный тип. Однако они имеют эту константу в классе Type по соображениям отражения!

...