Ошибка соглашения имени пакета Java - PullRequest
9 голосов
/ 07 января 2009

Я только начинаю изучать Java SE, и у меня нет проблем с обычным соглашением Java для имен пакетов, например. com.example.library_name_here.package_name_here

За исключением.

Я заметил несоблюдение этого требования в некоторых довольно известных пакетах.

  • JLine : jline.*
  • JACOB : com.jacob.* (jacob.com не существует)
  • JNA : com.sun.jna.* (заявление об отказе на сайте гласит ПРИМЕЧАНИЕ: Sun не спонсирует этот проект, хотя имя пакета (com.sun.jna) может подразумевать иное.)

Так что мне интересно, есть ли случаи, когда обычное соглашение об обратном доменном имени нарушается, и есть хорошие способы обойти это? Единственные случаи, о которых я могу думать, связаны с проблемами владения доменными именами (например, вы меняете хостинг проекта / доменное имя, или уже существует хорошо известный пакет, имеющий «права скваттера» на ваш домен, или ваше право собственности на домен работает и кто-то другой его снимает).

edit: если я использую доменное имя моей компании, а мы выкуплены или у нас есть дополнительный доход, что нам делать с именами пакетов? оставить их такими же или переименовать? (Я полагаю, что переименование плохо с точки зрения того, что скомпилированные классы, ссылающиеся на пакет, затем теряют)

Ответы [ 6 ]

12 голосов
/ 07 января 2009

Это соглашение об именах. Нет реального требования или даже ожидания, что имя пакета сопоставляется с именем домена.

5 голосов
/ 07 января 2009

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

У кого-то есть веская причина иметь пакеты в пространстве имен sun. Если они предоставляют реализацию общедоступного API, часто необходимо реализовать классы в пространстве имен API.

3 голосов
/ 07 января 2009

Если вы поднимаетесь по кривой изучения Java, я бы больше беспокоился о том, чтобы сделать вашу структуру упаковки понятной, чтобы вы могли легко найти искомый класс.

2 голосов
/ 07 января 2009

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

2 голосов
/ 07 января 2009

Единственное, что имеет значение (IMHO), это то, что части имени пакета «отсортированы» по важности, то есть, что вы не получите в итоге gui.myprog, util.myprog, main.myprog, но с myprog. gui, myprog.util и myprog.main. Не имеет значения, действительно ли имя пакета начинается с домена верхнего уровня, за которым следует имя домена.

1 голос
/ 07 января 2009

Вы не можете использовать языковые ключевые слова в качестве части имени пакета, это другой случай, когда соглашение о доменном имени не может быть применено - неудача для LONG Building Technologies

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

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