Пакеты Java - как я должен использовать его, чтобы сделать его осмысленным? - PullRequest
1 голос
/ 29 сентября 2010

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

Хорошо, дело в том, почему существует ключевое слово «пакет» (я знаю, что оно должно делать, я ставлю под сомнение необходимость его существования)

Как я выяснил, если вы определяете какой-то класс как часть пакета, говорите, что имя пакета - A, а класс импортируется в какой-то другой класс, и вы хотите скомпилировать класс с помощью javac, вы должны переместите класс из пакета A в каталог с тем же именем.

Зачем беспокоиться о написании «пакета» в начале каждого класса, если в конце вам понадобится создать специальный каталог для него? Почему файловой системы самой по себе недостаточно для группировки этих классов? Почему это не может работать как #include в C? В любом случае, Javac не создает никаких двоичных файлов, так зачем делать их более сложными? Как я вижу, одно только ключевое слово package ничего не делает, кроме того, что заставляет вас писать более сложную сборку xmls ...

Ответы [ 5 ]

5 голосов
/ 29 сентября 2010

Хранение классов Java в файловой системе - это только один из способов. Спецификация языка Java также допускает хранение в базе данных:
http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.2.2

4 голосов
/ 29 сентября 2010

Я думаю, что для разработчика полезно визуально видеть

package com.company.module;

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

2 голосов
/ 29 сентября 2010

На самом деле, вы можете поместить файлы Java в любое место.до тех пор, пока имена файлов передаются в

javac file...

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

, когда Java была разработана в 1995 году, существует законная проблема, чтоИерархическая файловая система может быть не единственным носителем, на котором сохранены исходники Java.поэтому исходники java должны быть автономными и содержать декларацию пакета.Эта проблема в настоящее время умеренно оправдана в некоторых случаях использования.

2 голосов
/ 29 сентября 2010

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

Одним из оправданий этого является то, что, как вы говорите, приложения Java не компилируютсядвоичный файлТаким образом, во время выполнения классы должны загружаться в режиме ad-hoc (как на них ссылаются).Вы обычно делаете это, предоставляя classpath.Если бы у нас не было жесткой структуры каталогов, загрузчик классов должен был бы просмотреть каждый отдельный файл класса, чтобы убедиться, что он правильный.Наличие последовательной структуры делает поиск невероятно эффективным.

Теперь к вашему вопросу ... другое направление.Почему, если у нас есть такая файловая структура, нам нужен оператор пакета вверху?Правда в том, что, хотя мы в основном придерживаемся файловой структуры, это не является строго необходимым.Вы можете создать собственный загрузчик классов, который не ожидает, что файлы классов будут следовать этой иерархической структуре (или даже быть файлами!), Так же, как вы можете создать компилятор, который не требует такой же жесткой структуры.Из-за этого сам класс должен быть скомпилирован с понятием его полного имени.

Если это вас беспокоит, вы, вероятно, не пользуетесь утилитами, которые предоставляет IDE.Я не писал вручную package ... годами, моя IDE вставляет его для меня.

0 голосов
/ 29 сентября 2010

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

Давайте возьмем небольшой графический проект для добавления заказов. Вы можете разделить ваш проект на 3 пакета:

  • пользовательский интерфейс
  • коммунальные услуги
  • инструменты для баз данных

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

...