Каково значение обратного доменного имени для структуры пакета Java

Почему мы используем обратное доменное имя, например com.something. или орг.что-то. структура для пакетов Java? Я понимаю, что это вносит какую-то уникальность, но зачем нам эта уникальность?

6 ответов

Решение

Глобально уникальные имена пакетов позволяют избежать конфликтов имен между библиотеками из разных источников. Вместо создания новой центральной базы данных глобальных имен используется реестр доменных имен. Из JLS:

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

О том, почему мы делаем все наоборот: представьте, что у вас есть два важных пакета, пакет учета и графический пакет. Если вы указали их в "прямом" порядке:

accounting.mycompany.org
graphics.mycompany.org

Тогда это означает, что есть главный accounting пакет, подраздел которого предназначен для mycompanyи подраздел этого пакета называется org пакет, который вы на самом деле используете. Тем не менее, вы хотите это:

org.mycompany.accounting
org.mycompany.graphics

Это имеет больше смысла. Из всех пакетов от организаций (org), Вы смотрите на mycompany в частности, и у него есть два подпакета, accounting и graphics из них.

Как вы говорите, обратные доменные имена в качестве имени базового пакета гарантируют уникальность. Предположим, что две компании с DN example.com и example.org обе определяют класс Employee в своей структуре. Теперь, если вы используете обе платформы, вы не сможете точно определить, какого сотрудника вы хотите использовать в своем коде, но если они определены в пакетах com.example и org.example соответственно, вы можете указать компилятору /JVM, в частности, какой у вас класс. ссылаясь на. Если уникальные пакеты не определены, вы получите ошибки компиляции или ошибки времени выполнения, например, если вы используете класс сотрудника com, но сначала загружается класс сотрудника org из classpath, вы получите ошибку времени выполнения, так как два класса сотрудников могут не имеют одинаковую структуру.

Уникальность необходима для загрузки классов.

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

Обычно это происходит, если есть несколько библиотек (jar), которые содержат классы с одинаковыми именами.

Также посмотрите это.

Как вы сказали, это приносит уникальность, то, что нужно, особенно при работе со сторонним кодом. Например, предположим, что вы используете созданную мной библиотеку. Я использовал пакет "foo" и у меня там есть класс с именем Bar. Теперь, если вы также используете имя пакета "foo" И у вас есть класс с именем Bar, это будет означать, что ваша реализация переопределит мою реализацию Bar, сделав мою реализацию недоступной. С другой стороны, если бы мой пакет был "com.mydomain.foo", и я имел там класс Bar, то вы можете свободно использовать имя Bar в одном из ваших классов, и оба класса все равно можно было бы однозначно идентифицировать и использовать отдельно.,

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

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

Это также применимо, когда код создается как часть различных проектов в организации.

Другие вопросы по тегам