Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

accounting.mycompany.org
graphics.mycompany.org

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

org.mycompany.accounting
org.mycompany.graphics

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

Ответ 3

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

Ответ 4

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

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

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

Также см. this.

Ответ 5

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

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

Ответ 6

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

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