Как мне переименовать переменную только в часть кода?
Например:
System.out.println("Rectangle 1: " + "\n" + "Width: " + r1.width + "\n" + "Height: " +
r1.height + "\n" + "Color: " + r1.color + "\n" + "Area and Perimeter: " +
r1.getArea(r1.width, r1.height) + ", " + r1.getPerimeter(r1.width, r1.height));
Поэтому, если я хочу напечатать то же самое для второго прямоугольника, используя r2 как refVar, есть ли способ, которым я могу быстро это сделать? Я попробовал копировать и вставлять, используя Alt + Shift + R, но в итоге он меняет все r1 refvars.
Взгляните на не повторяйте себя (DRY), который был разработан для предотвращения подобных ситуаций. Вместо переименования переменных создайте отдельный метод, который будет принимать любой прямоугольник и распечатать его детали.
public static void printRectangleDetails(Rectangle r){
System.out.println("Rectangle 1: " + "\n" + "Width: " + r.width + "\n" + "Height: " +
r.height + "\n" + "Color: " + r.color + "\n" + "Area and Perimeter: " +
r.getArea(r.width, r.height) + ", " + r.getPerimeter(r.width, r.height));
}
Теперь вы можете использовать его с вашими прямоугольниками r1
и r2
когда это необходимо
printRectangleDetails(r1);
...
printRectangleDetails(r2);
Если по какой-то причине вы не можете создать отдельный метод и использовать принцип DRY, вы можете сделать что-то вроде этого:
скажем, у нас есть
String foo = "foo";
System.out.println(foo+" hello wordls"+ foo);
String bar = "bar";
System.out.println(foo+" hello wordls"+ foo);
и вы хотите заменить foo
на второй оператор печати на bar
. Используя Alt + Shift + R (или из меню: Refactor
→ Rename..
) во втором заявлении печати переименуйте все ссылки foo
. Чтобы предотвратить его повторное использование вашей ссылки foo
(компилятор даст вам ошибку, но не волнуйтесь, мы позже удалим ее, это полезно только при переименовании) непосредственно перед операциями, из которых вы хотите изменить foo
на bar
например
String foo = "foo";
System.out.println(foo+" hello wordls"+ foo);
String bar = "bar";
String foo = "whatever";
// ^^^
System.out.println(foo+" hello wordls"+ foo);
Теперь используйте Alt + Shift + R на этом новом дублированном foo
и eclipse будет искать foo
из этой новой ссылки и игнорировать предыдущие foo
, поэтому вы должны увидеть что-то вроде
(как вы видите, первые два foo
не выбраны для переименования)
так что вы можете изменить его в bar
, как
String foo = "foo";
System.out.println(foo+" hello wordls"+ foo);
String bar = "bar";
String bar = "whatever";
System.out.println(bar+" hello wordls"+ bar);
и после этого просто удалил этот дополнительный String bar = "whatever";
так как вам это больше не нужно.
НО БУДЬ ОСТОРОЖЕН. Таким образом вы переименуете все переменные foo
после дублирования foo
, а не только в System.out.println(foo+" hello wordls"+ foo);
который вы хотели переименовать. Чтобы убедиться, что вы не изменяете ничего, чего не хотите, поместите код, который вы хотите изменить в конце вашего метода (где вы уверены, что нет foo
который не следует изменять после него). После того, как вы закончите, переместите свой измененный код в нужное место.
Я предлагаю вам использовать диалог Find/Replace для этой проблемы, который он подходит для ваших нужд. Выберите набор инструкций, затем нажмите Ctrl + F. Появится диалоговое окно "Найти/заменить", обратите внимание, что в группе " Область видимости " выбран вариант " Выбранные линии".
Вы можете использовать " Заменить все" или " Заменить/найти". Но будьте осторожны, что он также заменяет строку в комментариях, если она найдена.
См. Рисунок ниже.
r1
можно изменить во многих нежелательных местах. В этом случае OP должен будет выполнить итерации вручную с помощью этого инструмента для всех результатов поиска и выбрать, следует ли изменить его или нет. Я полагаю, что OP пытается избежать этого и ищет способ / инструмент, чтобы сделать это автоматически, а не вручную.