Какова конвенция для разделителя слов на имена пакета Java?

Как нужно разделить слова на имена пакета? Какое из следующего корректно?

  1. com.stackoverflow.my_package (подчеркивание)
  2. com.stackoverflow.my-package (дефисы)
  3. com.stackoverflow.MyPackage (Camel-регистр)

Что генерал типичен?

336
задан Clijsters 21 November 2017 в 00:42
поделиться

3 ответа

Вот что предписывает официальный документ "Соглашения об именовании":

Пакеты

Префикс уникального имени пакета всегда записывается строчными буквами ASCII и должен быть одним из доменных имен верхнего уровня, в настоящее время com, edu, gov, mil, net, org, или один из английских двухбуквенных кодов, идентифицирующих страны, как указано в стандарте ISO 3166, 1981.

Последующие компоненты имени пакета варьируются в соответствии с внутренними соглашениями организации об именовании. Такие соглашения могут определять, что определенные компоненты имени каталога являются именами подразделений, отделов, проектов, машин или логинов.

Примеры

  • com.sun.eng
  • com.apple.quicktime.v2
  • edu.cmu.cs.bovik.cheese

Ссылки


Обратите внимание, что, в частности, все, что следует за префиксом домена верхнего уровня, не определено вышеуказанным документом. JLS также соглашается с этим, приводя следующие примеры:

  • com.sun.sunsoft.DOE
  • gov.whitehouse.socks.mousefinder
  • com.JavaSoft.jag.Oak
  • org.npr.pledge.driver
  • uk.ac.city.rugby.game

Следующая выдержка также уместна:

В некоторых случаях имя интернет-домена может не быть действительным именем пакета. Вот некоторые соглашения для решения таких ситуаций:

  • Если доменное имя содержит дефис или любой другой специальный символ, недопустимый в идентификаторе, преобразуйте его в знак подчеркивания.
  • Если любой из компонентов имени пакета является ключевым словом, добавьте к нему знак подчеркивания.
  • Если какой-либо из компонентов имени пакета начинается с цифры или любого другого символа, который не допускается в качестве начального символа идентификатора, то к компоненту добавляется знак подчеркивания.

Ссылки

229
ответ дан 23 November 2019 в 00:41
поделиться

Все три варианта не являются условностями.

Use com.stackoverflow.mypackage.

В именах пакетов не соблюдаются ни camel casing, ни подчеркивания, ни дефисы соглашение об именовании пакетов.

Кроме того, Google Java Style Guide указывает точно такое же (т.е. com.stackoverflow.mypackage) соглашение:

5.2.1 Имена пакетов

Имена пакетов все строчные, последовательные слова просто объединяются вместе (без подчеркивания). Например, com.example.deepspace, не com.example.deepSpace или com.example.deep_space.

- Google Java Style Guide: 5.2 Правила по типам идентификаторов: 5.2.1 Имена пакетов.

234
ответ дан 23 November 2019 в 00:41
поделиться

Официальные соглашения об именовании не настолько строги, они даже не "запрещают" обозначения в верблюжьем регистре, за исключением префикса (com в вашем примере).

Но лично я бы избегал букв верхнего регистра и дефисов , даже цифр. Я бы выбрал com.stackoverflow.mypackage, как предложил Брэгбой.

(дефисы '-' не разрешены в именах пакетов)

EDIT

Интересно - в спецификации языка тоже есть что сказать о соглашениях об именах.

В Chapter 7.7 Unique Package Names мы видим примеры с именами пакетов, которые состоят из букв верхнего регистра (так что нотация CamelCase будет в порядке), и они предлагают заменить дефис на подчеркивание ("mary-lou" -> "mary_lou") и префикс java ключевых слов с подчеркиванием ("com. example.enum" -> "com.example._enum")

Еще несколько примеров использования заглавных букв в именах пакетов можно найти в главе 6.8.1 Имена пакетов.

17
ответ дан 23 November 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: