В чем смысл соглашения Java об именовании пакетов?

14

Я не понимаю, почему Java использует обратное (возможно, гипотетическое) доменное имя в качестве имени пакета, хотя в основном нет связи между доменным именем, которое используют некоторые люди, и продуктами, которые они имеют. У многих разработчиков даже нет домена.

Каковы причины этого соглашения об именах, если таковые имеются?

Луис Рис
источник
Даже без домена в Java-земле обычно делают вид, что вы делаете для именования пакетов. Например, в вашем случае вы бы использовали, com.louisrhys.xxx.yyyнезависимо от того, являетесь ли вы владельцемlouisrhys.com
Уэйн Молина

Ответы:

14

Глобальная уникальность. Если все или, по крайней мере, серьезные разработчики, распространяющие свой код за пределами собственных проектов, придерживаются этого соглашения, никогда не случится столкновение имен при добавлении в проект другой сторонней библиотеки. Имейте в виду, что Java изначально распространялась как решение для развертывания кода в любом месте и в любое время (с помощью апплетов и удаленной загрузки классов через Интернет).

Килиан Фот
источник
3
В Java 1.4 Sun использовала инструменты Apache XML с открытым исходным кодом без изменения пространства имен. Сделано довольно «интересно», чтобы попытаться иметь более новую версию в ваших собственных приложениях.
3
Java was initially propagated as a solution for code deployment anywhere, anytime В отличие от того, что Java сейчас? Я не знаю о вас, но я все еще несколько успешно использую Java WebStart для развертывания кода на стороне клиента на тысячах компьютеров во внутренней сети. Это делает "Release Early, Release Часто" намного менее болезненным для всех.
maple_shaft
1
Не обязательно правда. В конечном итоге вы потеряете доменное имя; будь то смерть или просто забыть продлить его. Кто-то другой мог бы купить его и, даже не подозревая, выпустить пакет Java, который конфликтует с вашим. И есть также вероятность того, что кто-то владел доменом раньше вас и выпустил код, с которым конфликтует ваш код.
Кевин
@maple_shaft У большинства пользователей такого не было со времен упадка Java-апплетов. Скорее, это просто еще одна платформа для приложений (например, Qt, XUL или Electron).
user253751
12

Как говорит Википедия на эту тему,

«Спецификация языка Java устанавливает соглашения об именах пакетов, чтобы избежать возможности двух опубликованных пакетов с одинаковыми именами».

Lalex
источник
В спецификации подробно указано, какое соглашение использовать, если у разработчика нет собственного доменного имени?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner: Нет, это не так .
Майк Сеймур
@MikeSeymour: Итак ... мы можем назвать их так, как хотим в этом случае? Woohoo! :)
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner Вы можете назвать их так, как хотите в любом случае. Если вы хотите, чтобы другие люди использовали ваше программное обеспечение, вы должны следовать спецификации и вывести логическое и, вероятно, уникальное пространство имен, если у вас нет реального домена.
Джереми
2

Я нашел два опубликованных Oracle документа, в которых обсуждается наименование пакетов. В разделе « Учебники по Java» есть страница « Наименование пакета» и раздел «Пакеты» в спецификации языка Java .

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

Томас Оуэнс
источник