Почему бы нам не использовать пакет src (по умолчанию)? - PullRequest
3 голосов
/ 03 ноября 2011

Я недавно начал использовать Eclipse IDE и во многих местах читал, что не следует использовать пакет по умолчанию (src) и создавать новые пакеты.
Я просто хотел узнать причину этого.

Ответы [ 6 ]

13 голосов
/ 03 ноября 2011

Использование пакета по умолчанию может создать конфликты пространства имен. Представьте, что вы создаете библиотеку, которая содержит класс MyClass. Кто-то использует вашу библиотеку в своем проекте, а также имеет класс MyClass в своем пакете по умолчанию. Что должен делать компилятор? Пакет в Java на самом деле является пространством имен, которое полностью идентифицирует ваш проект. Поэтому важно не использовать пакет по умолчанию в реальных проектах.

4 голосов
/ 03 ноября 2011

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

Поскольку Java предназначался для запуска в любом месте, и по сети (это означает, что он может получить информацию от Sun, IBM или даже от Joe Bloggs и Dodgy Software Company Pty Ltd), тот факт, что я владел paxdiablo.com (на самом деле я не притворяюсь, что делаю ради этого ответа), означалчто можно было бы безопасно назвать весь мой код com.paxdiablo.blah.blah.blah, и это не мешало бы кому-либо еще, если только они не были психически неполноценны и не использовали мое пространство имен: -)

С глава 7, "Пакеты", Спецификации языка Java :

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

Обычно я обычно начинаю с использования пакета по умолчанию и перемещаю его только в реальный пакет (что довольно легко сделатьс Eclipse IDE), если он выживает достаточно долго, чтобы быть выпущенным на волю.

1 голос
/ 03 ноября 2011

Основные причины, по которым я могу придумать:

  1. Он помогает организовать вещи, которые помогут вам (и другим!) Узнать, где искать классы / функции.
  2. Вы можете определять классы с одинаковыми именами, если они находятся в разных пакетах.
  3. Классы / etc в пакете по умолчанию нельзя импортировать в именованные пакеты. Это означает, что для того, чтобы использовать ваши классы, другие люди должны будут также поместить все свои классы в пакет по умолчанию. Это усугубляет проблемы, которые решают причины 1 и 2.
1 голос
/ 03 ноября 2011

Объявляя пакет, вы определяете свое собственное пространство имен (для классов). Таким образом, если у вас два идентичных класса, использующих другое имя пакета (пространство имен), вы сможете различать, какой из них вы хотите использовать.

1 голос
/ 03 ноября 2011

Java использует пакет как способ различения классов. Используя пакеты, вы можете иметь класс org.example.Something и класс org.example.extended.Something и иметь возможность различать их, даже если они оба называются Something. Поскольку их пакеты разные, вы можете использовать их в одном проекте.

0 голосов
/ 03 ноября 2011

С точки зрения Java, есть два основных жизненных цикла разработки / развертывания, которые вы можете выполнить, используя ant для сборки и развертывания, или жизненный цикл maven. Оба этих жизненных цикла ищут исходный код и ресурсы в локальных каталогах, а в случае maven - в определенных репозиториях, локально или в сети.

Дело в том, что при настройке проекта для разработки и, в конечном итоге, развертывания вы хотите создать структуру проекта, которая будет переносимой и не зависит от IDE, т.е. Ваш проект может быть собран и развернут с использованием любой из ваших сред сборки. Если вы используете сильную зависимость от платформы Eclipse для предоставления переменных класса, путей компиляции и т. Д., Вы можете столкнуться с проблемой, заключающейся в том, что ваш проект будет создаваться и развертываться только с использованием этой конфигурации j, и он может быть не переносимым в среду других разработчиков, так сказать.

...