Нарушают ли инструменты рефакторинга Eclipse спецификацию языка Java? - PullRequest
2 голосов
/ 16 июня 2010

В Eclipse 3.5, скажем, у меня есть такая структура пакетов:

 tom.package1
 tom.package1.packageA
 tom.package1.packageB

Если я щелкну правой кнопкой мыши на пакете tom.package1 и зайду в Refactor-> Rename, опция «Переименовать подпакеты» появится в качестве флажка. Если я выберу его, а затем переименую tom.package1 в tom.red, структура моего пакета будет выглядеть следующим образом:

tom.red
tom.red.packageA
tom.red.packageB

Все же я слышу, что пакеты Java не являются иерархическими . Учебные руководства по Java подтверждают это (см. Раздел «Кажущаяся иерархия пакетов»). В этом случае, похоже, Eclipse рассматривает пакеты как иерархические.

Мне было любопытно, почему спецификаторы доступа не могут разрешить / ограничить доступ к «подпакетам» в предыдущем вопросе , потому что я ЗНАЛ, что видел «подпакеты», на которые ссылались где-то раньше.

Значит, инструменты рефакторинга Eclipse намеренно вводят в заблуждение впечатлительные молодые умы, развивая миф о «субпакете»? Или я что-то здесь неправильно истолковываю?

Ответы [ 4 ]

7 голосов
/ 16 июня 2010

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

Инструменты рефакторинга ведут себя так же, как и они, потому что это поведение полезно для разработчиков,Такое поведение полезно для разработчиков, поскольку для многих целей и задач мы рассматриваем пакеты как иерархические (abc имеет какую-то связь с ab, даже если эта связь не согласована от проекта к проекту).Это не означает, что Java внутренне воспринимает их как иерархические.

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

5 голосов
/ 16 июня 2010

Пакеты Java не являются иерархическими в том смысле, что импорт всего из пакета A не импортирует все из пакета A.B.

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

2 голосов
/ 17 июня 2010

даже java само по себе имеет понятие подпакета:

http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html

java -ea [: <имя пакета> "..." | : <имя класса>]

Включить утверждения. Утверждения по умолчанию отключены.

Без аргументов enableassertions или -ea включают утверждения. С одним аргументом, оканчивающимся на «...», коммутатор разрешает утверждения в указанном пакете и любых подпакетах . Если аргумент просто «...», коммутатор включает утверждения в неназванном пакете в текущем рабочем каталоге. Если один аргумент не заканчивается на «...», переключатель разрешает утверждения в указанном классе.

Если в одной командной строке содержится несколько экземпляров этих ключей, они обрабатываются по порядку перед загрузкой каких-либо классов. Так, например, чтобы запустить программу с утверждениями, включенными только в пакете com.wombat.fruitbat (и любых подпакетах ), можно использовать следующую команду:

java -ea:com.wombat.fruitbat... <Main Class>
1 голос
/ 16 июня 2010

Пакеты Java не являются иерархическими, но Eclipse хранит пакеты в файловой структуре вашей системы.

tom.package1.packageA представляется в файловой системе Windows как tom/package1/packageA.

Когда вы спрашиваете EclipseЧтобы реорганизовать имя пакета, вы просите Eclipse изменить имя структуры каталогов файловой системы.

В Eclipse вы можете иметь такие пакеты, как:

tom.package1.packageA
tom.package2.packageB
tom.package3.packageC

У вас просто будетразличные каталоги файловой системы 2-го уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...