Как нужно разделить слова на имена пакета? Какое из следующего корректно?
com.stackoverflow.my_package
(подчеркивание)com.stackoverflow.my-package
(дефисы)com.stackoverflow.MyPackage
(Camel-регистр)Что генерал типичен?
Вот что предписывает официальный документ "Соглашения об именовании":
Пакеты
Префикс уникального имени пакета всегда записывается строчными буквами 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
Следующая выдержка также уместна:
В некоторых случаях имя интернет-домена может не быть действительным именем пакета. Вот некоторые соглашения для решения таких ситуаций:
- Если доменное имя содержит дефис или любой другой специальный символ, недопустимый в идентификаторе, преобразуйте его в знак подчеркивания.
- Если любой из компонентов имени пакета является ключевым словом, добавьте к нему знак подчеркивания.
- Если какой-либо из компонентов имени пакета начинается с цифры или любого другого символа, который не допускается в качестве начального символа идентификатора, то к компоненту добавляется знак подчеркивания.
Все три варианта не являются условностями.
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 Имена пакетов.
Официальные соглашения об именовании не настолько строги, они даже не "запрещают" обозначения в верблюжьем регистре, за исключением префикса (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 Имена пакетов.