Демонстрация столкновения имен пакетов в Java - PullRequest
3 голосов
/ 09 октября 2010

Я получил этот вопрос в качестве задания:

Пакеты / Нейминг

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

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

Мое сомнение:

Я не могу придумать, как (сценарий) продемонстрировать то, что было задано. Поскольку импорт Java является абсолютным, описанная ситуация представляется невозможной (IMO).

Пожалуйста, помогите мне продемонстрировать эту вещь.

Заранее спасибо:)

Ответы [ 2 ]

4 голосов
/ 09 октября 2010

Да, если вы измените имя пакета, вам также потребуется изменить импорт. Если вам случится использовать Eclipse, есть простой способ сделать это. В представлении Package Explorer щелкните правой кнопкой мыши на пакете и выполните Refactor-> Rename. Он переименует пакет и обновит все соответствующие импорты в других классах.

Вот как это может работать:

JavaProjectA
   src
     com.some.package
         ClassA
JavaProjectB
   src
     com.another.package
         ClassA

Хорошо, пока. Каждый класс уникален благодаря своей структуре пакета. Однако возможно создать это:

JavaProjectA
   src
     com.some.package
         ClassA
JavaProjectB
   src
     com.some.package
         ClassA

Только один из этих классов ClassA будет экспортирован в банку и использован во время выполнения.

3 голосов
/ 09 октября 2010

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

Единственный способ вызвать конфликт имен пакетов - это поместить два отдельных jar-файла в ваш путь к классам, которые оба содержат классы в одном пакете.Если ни одно из имен классов не конфликтует, то конфликта нет.Если некоторые имена классов конфликтуют, JVM попытается загрузить их из файла jar, который находится ранее в пути к классам.Ошибки будут возникать, когда некоторые классы находятся только в более позднем jar, а классы в более позднем jar используют классы, имена которых также используются в более раннем jar.Характер ошибки зависит от типа использования.

(Я должен пояснить, что этот ответ относится к Pure Java и не имеет отношения к тому, как может генерировать какая-либо конкретная IDE или система сборкибаночки для проекта.)

...