Устаревший синтаксис Java - PullRequest
0 голосов
/ 08 октября 2018

Читая документ Java Code Conventions от 1997 , я увидел это в примере на P16 об условных обозначениях имен переменных:

int i;
char *cp;
float myWidth;

Второе объявление представляет интерес - для меня оновыглядит очень похоже на то, как вы могли бы объявить указатель в C. Это дает синтаксическую ошибку при компиляции в Java 8.

Просто из любопытства: был ли этот синтаксис когда-либо действительным?Если так, что это значит?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Похоже, что это общий документ стиля кодирования для C-подобных языков с некоторыми специфичными для Java дополнениями.См., Например, также следующую страницу:

Не используйте оператор присваивания там, где его легко спутать с оператором равенства.Пример:

if (c++ = d++) { // AVOID! Java disallows.
    …
}

Нет смысла указывать программисту избегать чего-либо, что является ошибкой синтаксиса, так что из этого мы можем сделать единственный вывод, что документ не является 100%Специфично для Java.

Другая возможность заключается в том, что он был задуман как стиль кодирования для всей системы Java, включая части C ++ JRE и JDK.

Обратите внимание, что Sun отказалась от стиля кодированиядокумент еще задолго до того, как Oracle вошел в картину.Они ограничились указанием, что за язык является , а не как его использовать.

0 голосов
/ 11 октября 2018

Неверный синтаксис!

Это просто ошибка копирования / вставки.

Токен (*) в переменных применим только в C, поскольку он использует указатели, тогда как JAVA никогда не использует указатели.

А Token (*) используется только как оператор в JAVA.

0 голосов
/ 08 октября 2018

Это ошибка копирования-вставки, я полагаю.

Из JLS 1 (который действительно не так просто найти!), Раздел объявления локальных переменных утверждает, что такое объявление, по сути, является типом, за которым следует идентификатор.Обратите внимание, что нет специальных ссылок на *, но есть специальные ссылки на [] (для массивов).

char - это наш тип, так что единственная возможность, которая остается, заключается в том, что *cp является идентификатором.Раздел в Идентификаторы состояния

Идентификатор представляет собой последовательность символов Java с неограниченной длиной и цифр Java, первая из которых должна быть буквой Java,
...
Буква Java - это символ, для которого метод Character.isJavaLetter ( §20.5.17 ) возвращает true

И JavaDoc для этого метода гласит:

Символ считается буквой Java, если и только если он является буквой ( §20.5.15 ) или являетсязнак доллара «$» (\u0024) или символ подчеркивания («нижняя строка») «_» (\u005F).

т. foo, _foo и $foo были в порядке, но *foo никогда не действовали.


Если вы хотите более современное руководство по стилю Java, Руководство по стилю Google , пожалуй, наиболее частоссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...