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

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

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

что такое общий стандарт?

6 ответов


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

пакетов

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

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

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

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

ссылки


все три не являются конвенциями.

использовать 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 имена пакетов.


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

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

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

редактировать

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

на Глава 7.7 Уникальные Имена Пакетов мы видим примеры с именами пакетов, которые состоят из букв верхнего регистра (так что обозначение CamelCase было бы в порядке), и они предлагают заменить дефис подчеркиванием ("mary-lou" -> "mary_lou") и префиксом Java keywords с подчеркиванием ("com.образец.перечисление" -> "ком.образец._enum")

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


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

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

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

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


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


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

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

com.stackoverflow.mypackage

Refer Объявление имени JLS