Что такое соглашение для разделителя слов в именах пакетов Java?

Как следует разделять слова в именах пакетов? Что из перечисленного верно?

  • com.stackoverflow.my_package (подчеркивание)
  • com.stackoverflow.my-package (дефис)
  • com.stackoverflow.MyPackage (CamelCase)

Каков общий стандарт?

Ответ 1

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

Пакеты

Префикс уникального имени пакета всегда пишется строчными буквами 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

Следующий отрывок также имеет отношение:

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

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

Ссылки

Ответ 2

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

Используйте com.stackoverflow.mypackage.

Имена пакетов не соответствуют верблюжьему корпусу или символу подчеркивания или дефисам соглашение об именах пакетов.

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

5.2.1 Названия пакетов

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

- Руководство по стилю Google Java: 5.2 Правила по типу идентификатора: 5.2.1 Названия пакетов.

Ответ 3

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

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

(переносы "-" не являются законными в именах пакетов)

ИЗМЕНИТЬ

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

В Глава 7.7 ​​Уникальные имена пакетов мы видим примеры с именами пакетов, которые состоят из прописных букв (поэтому нотация CamelCase будет в порядке), и они предложите заменить hyphonation на символ подчеркивания ( "mary-lou" → "mary_lou" ) и префикс java-ключевых слов с подчеркиванием ( "com.example.enum" → "com.example._enum" )

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

Ответ 4

Любой может использовать подчеркивание _ (все в порядке)

Никто не должен использовать гипен - (это плохая практика)

Никто не должен использовать заглавные буквы в именах пакетов (плохая практика)

ПРИМЕЧАНИЕ. Здесь "Плохая практика" предназначена для того, чтобы технически вам разрешалось это использовать, но условно писать ее нехорошо.

Источник: Наименование пакета (docs.oracle)

Ответ 5

Подчеркивания выглядят уродливыми в именах пакетов. Для того, что стоит, в случае имен, com.company.app.ingresoegresofijo(ingreso/egreso fijo) → com.company.app.iefijo из трех или более слов, я использую инициалы (например: com.company.app.ingresoegresofijo(ingreso/egreso fijo) → com.company.app.iefijo), а затем документирует пакет цели в package-info.java.

Ответ 6

Конкатенация слов в имени пакета - это то, что большинство разработчиков не делает.

Вы можете использовать что-то вроде.

com.stackoverflow.mypackage

Обратитесь Декларация имени JLS

Ответ 7

Я бы предпочел использовать отдельные слова и подпакеты, поэтому вместо того, чтобы говорить com.stackoverflow.my-package, я бы сделал его com.stackoverflow.my.package

Это открывает возможность добавления подпакетов в будущем, связанных с вашим родительским пакетом. Ссылка: http://programmergate.com/coding-conventions/