IntelliJ для перемещения класса вместе с конфликтующими классами в новый пакет?

#java #intellij-idea #intellij-13

#java #intellij-идея #intellij-13

Вопрос:

Когда я выбираю Refactoring > Move класс Java, и в результате IntelliJ предупреждает, что это вызовет конфликты для других классов. Есть ли способ сообщить IntelliJ переместить класс вместе с любыми классами, которые также могут иметь конфликты?

РЕДАКТИРОВАТЬ: похоже, мой первоначальный вопрос неясен, поэтому я привожу пример.

Если у меня есть ClassA, который использует ClassB внутри. Если я перемещу ClassA в другой каталог (другой модуль maven), ClassA больше не сможет получить доступ к ClassB. В идеале IntelliJ должен иметь возможность автоматического перемещения ClassB в другой каталог.

Комментарии:

1. привет, просто нажмите на класс, нажмите клавишу f6, затем выберите пакет для перемещения и нажмите refactor intellij автоматически обрабатывает ссылки

2. @M.Sharma Я только что обновил вопрос примером. Пожалуйста, посмотрите.

3. В этом случае это может быть ошибка IntelliJ, потому что после рефакторинга intellij автоматически обрабатывает операторы импорта

4. @M.Sharma Конфликты возникают не из-за операторов импорта. ClassB будет иметь ошибки компиляции, потому что он не может получить доступ к ClassA, который сейчас находится в другом каталоге / модуле.

5. Босс, какой именно класс выдает вам ошибку компилятора при импорте, просто наведите курсор на него и нажмите ALT ENTER и во всплывающем меню добавьте оператор импорта пути к модулю

Ответ №1:

Когда вы пытаетесь переместить класс (вы можете выполнить рефакторинг> Переместить или нажать клавишу F6 или просто перетащить), Intellij предоставляет некоторые варианты, такие как:

Search in comments and strings

Search for text occurrences

Search for references и т.д..

Если вы выберете все эти Intellij, он будет обрабатывать ваши зависимости. Так что вам не нужно беспокоиться о них.

Установите флажок также Переместить диалоговое окно класса

Комментарии:

1. Я не вижу опции «Поиск ссылки» в IDEA 13. Снимок экрана

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

3. Похоже, мой первоначальный вопрос неясен, так как я привожу пример. Пожалуйста, посмотрите.

Ответ №2:

Проверьте модификаторы доступа всех классов, которые вы пытаетесь переместить.

Возможно, вы использовали модификатор ‘package-private’ (по умолчанию), а затем, когда вы перемещаете эти классы в другой пакет, другие классы теряют к ним доступ.

Комментарии:

1. Я понимаю, почему занятия приводят к конфликту. Вопрос заключается в том, как перенести эти классы в новый пакет.