Устаревший синтаксис Java
Считая документ условных обозначений Java с 1997 года, я увидел это в примере на P16 о соглашениях об именах переменных:
int i;
char *cp;
float myWidth;
Второе объявление представляет интерес - для меня это очень похоже на то, как вы можете объявить указатель на C. Он дает синтаксическую ошибку при компиляции под Java 8.
Просто из любопытства: был ли это действительный синтаксис? Если да, что это значит?
Ответы
Ответ 1
По-моему, это ошибка с копией.
Из JLS 1 (что действительно не так просто найти!), Раздел о локальных объявлениях переменных утверждает, что такое объявление, по сути, является типом, за которым следует идентификатор. Обратите внимание, что нет специальной ссылки на *
, но есть специальная ссылка, сделанная о []
(для массивов).
char
- наш тип, поэтому единственная возможная возможность заключается в том, что *cp
является идентификатором. Раздел "Идентификаторы"
Идентификатор представляет собой неограниченную последовательность букв Java и цифр Java, первая из которых должна быть буквой Java.
...
Буква Java - это символ, для которого метод Character.isJavaLetter(§20.5.17) возвращает true
И JavaDoc для этого метода заявляет:
Символ считается буквой Java тогда и только тогда, когда это буква (§20.5.15) или знак доллара "$" (\u0024
) или символ подчеркивания (" \u0024
строка") _ _ (\u005F
).
поэтому foo
, _foo
и $foo
были в порядке, но *foo
никогда не был действительным.
Если вы хотите получить более современное руководство по стилю Java, руководство по стилю Google, пожалуй, наиболее часто упоминается.
Ответ 2
Похоже, что это общий документ стиля кодирования для C-подобных языков с некоторыми дополнениями для Java. См., Например, также следующую страницу:
Не используйте оператор присваивания в месте, где его можно легко спутать с оператором равенства. Пример:
if (c++ = d++) { // AVOID! Java disallows.
…
}
Не имеет смысла говорить программисту, чтобы избежать чего-либо, что является синтаксической ошибкой в любом случае, поэтому единственный вывод, который мы можем извлечь из этого, заключается в том, что документ не является на 100% специфичным для Java.
Другая возможность заключается в том, что он предназначен как стиль кодирования для всей системы Java, включая C++ части JRE и JDK.
Обратите внимание, что Sun отказалась от документа стиля кодирования даже задолго до того, как Oracle появился на картинке. Они сдержались, указав язык, а не как его использовать.
Ответ 3
Недопустимый синтаксис!
Это просто ошибка копирования/вставки.
Токен (*) в переменных применим только в C, потому что он использует указатели, тогда как JAVA никогда не использует указатели.
И токен (*) используется только как оператор в JAVA.