Intellij IDEA извлекает константу через весь проект

Допустим, у меня есть "волшебная строка" в четырех классах, и я хочу, чтобы она во всех местах была заменена одной константой из некоторого класса констант. (Я говорю о классах Java/Groovy, но любые другие языки тоже будут полезны.) Лучшее решение, которое я могу придумать, — это извлечь константу в одном классе, а затем использовать диалоговое окно «Заменить в пути» для других. Но это не решает проблему импорта класса констант, а это довольно большая работа. Есть ли способ лучше?

Я нашел эту страницу документации, но эта функция не упоминается. .


person daerin    schedule 05.01.2015    source источник
comment
В этом случае IntelliJ не будет делать то, что вы хотите. Кстати: классы Constants обычно считаются очень плохим дизайном, поэтому, возможно, вы захотите переосмыслить свой подход.   -  person Software Engineer    schedule 05.01.2015
comment
@SoftwareEngineer, можете ли вы указать, почему классы Constant считаются плохим дизайном?   -  person Qw3ry    schedule 27.10.2020
comment
Я нашел только это и это, в котором говорится об интерфейсах и упоминаются классы как лучшая альтернатива   -  person Qw3ry    schedule 27.10.2020


Ответы (2)


Лучше использовать рефакторинг Найти и заменить дубликаты кода....

Извлеките константу, как обычно, а затем вызовите Найти и заменить дубликаты кода... для введенной константы. Он может найти все места в вашем проекте, где используется "magic string", и предложит заменить его ссылкой на константу.

person Bas Leijdekkers    schedule 07.07.2015
comment
Это звучит разумно, но, похоже, не работает для меня. - person Cincinnati Joe; 20.10.2016
comment
Жаль это слышать. Может быть, отправить отчет об ошибке с немного дополнительной информацией? youtrack.jetbrains.com - person Bas Leijdekkers; 20.10.2016
comment
(Забавно, только что снова столкнулся с этим, погуглил и нашел это :) Если вы выберете полное имя константы, то вызов функции «Найти и заменить дубликаты кода», похоже, ничего не сделает. Если вместо этого вы просто поместите курсор где-нибудь в константу, то рефакторинг начнется, как и ожидалось. Сбивает с толку! - person Cincinnati Joe; 07.12.2016

На самом деле это не так сложно сделать с помощью обычного действия Replace in Path.

Во-первых, вам нужно зайти в Settings и включить это: Editor -> General -> Auto Import -> Добавлять однозначный импорт на лету

Теперь создайте свою константу в каком-нибудь классе и выполните Replace in Path (ctrl-shift-R)

Текст для поиска: "foo"

Заменить на: Constants.FOO

Теперь используйте Найти и продолжайте нажимать Заменить, чтобы изменить это магическое значение во всех файлах, кроме класса Constants, где оно определено.

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

person vikingsteve    schedule 06.01.2015