Intellij Idea - Рефакторинг кода
В этой главе мы узнаем о рефакторинге кода и о том, как он работает в IntelliJ. Рефакторинг кода - это реструктуризация кода без изменения его функциональности и удобства использования. Рефакторинг кода может быть выполнен для улучшения читаемости кода, производительности или для удаления неиспользуемых / повторяющихся функций. IntelliJ обеспечивает отличную поддержку рефакторинга кода. В этой главе обсуждаются различные действия по рефакторингу кода.
Переименовать
Действия переименования можно использовать для переименования методов, их параметров, атрибутов класса, локальных переменных и так далее. Давайте создадим следующий класс в IntelliJ.
public class Employee {
private String name;
private String address;
private int age;
public Employee() {
this("Jarvis", "Palo Alto", 35);
}
public Employee(String name, String address, int age) {
this.name = name;
this.address = address;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
public static void main(String args[]) {
Employee e = new Employee();
System.out.println(e);
}
}
Теперь переименуем Employee класс к Person. Это действие внесет изменения в конструкторы иmain() метод -
Выберите слово сотрудника
Идти к Refactor → Rename и переименуйте его в Person.

Заменить дубликаты кода
Это одно из мощных действий рефакторинга. IntelliJ определяет дубликаты кода и заменяет его соответствующим кодом. Давайте введем дублирование кода и проведем его рефакторинг. Введите следующий код в редакторе -
public class Employee {
private String name;
private String address;
private int age;
public Employee() {
this("Jarvis", "Palo Alto", 35);
}
public Employee(String name, String address, int age) {
this.name = name;
this.address = address;
this.age = age;
}
public void setData(String name, String address, int age) {
this.name = name;
this.address = address;
this.age = age;
}
public void showEmployeeDetail() {
System.out.println("Name = " + name + ", Address = " + address + ", Age = " + age);
}
public static void main(String args[]) {
Employee e = new Employee();
e.showEmployeeDetail();
}
}
В этом примере Employee (имя строки, адрес строки, int age) конструктор и public void setData (имя строки, адрес строки, intage) полностью идентичны. После рефакторинга конструктор Employee (String name, String address, int age) изменяется следующим образом:
public Employee(String name, String address, int age) {
setData(name, address, age);
}
Для замены дубликатов -
Перейдите в Рефакторинг → Найти и заменить дубликаты кода.
Выберите область рефакторинга и следуйте инструкциям на экране, чтобы завершить действие.

Копировать рефакторинг
В этом разделе мы поймем, как скопировать один класс в другой. Давайте скопируем класс Employee в класс Person. Мы можем скопировать его в существующий модуль или в новый. IntelliJ внесет необходимые изменения в зависимости от этого. Выполните следующие шаги, чтобы выполнить рефакторинг копирования -
Идти к Refactor → Copy, откроется диалоговое окно.
Введите новое имя и целевой пакет.
Нажмите кнопку ОК, и он сделает все необходимое.

Переместить рефакторинг
Рефакторинг перемещения аналогичен копированию, но вместо создания еще одной копии он перемещает код в другой пакет или делает его внутренним классом другого класса.
Выполните следующие шаги, чтобы выполнить рефакторинг перемещения -
Перейдите в, Рефакторинг → Переместить.
Появится новое окно.
Выберите один из вариантов по вашему выбору и нажмите Refactor.

Безопасное удаление
Действие «Безопасное удаление» удалит объект только в том случае, если на него нет ссылки в проекте. Целью этой опции может быть класс, интерфейс, метод, поле или параметр.
Давайте посмотрим на это в действии. Введите следующий код в редакторе -
public class HelloWorld {
static void sayHello() {
System.out.println("Hello, World !!!");
}
public static void main(String[] args) {
sayHello();
}
}
Выполните следующие действия, чтобы выполнить действие безопасного удаления -
Выберите sayHello() метод.
Щелкните его правой кнопкой мыши и выберите Refactor → Safe Delete вариант.
Поскольку используется метод sayHello (), он покажет ошибку, как на следующем снимке экрана:

Изменить подпись
Действие изменяет подпись метода. Он может изменять имя метода, его параметры, типы, возвращаемые значения и так далее. Давайте возьмем метод из приведенного выше примера и изменим его подпись.
Выполните следующие действия, чтобы выполнить действие «Изменить подпись» -
Выберите метод.
Щелкните его правой кнопкой мыши и выберите действие Refactor → Change signature.
Появится новое окно, в котором вы можете выполнить указанные выше действия.
Внизу окна отображается предварительный просмотр новой подписи.

Тип миграции
Перенос типа изменяет тип символа. Этот символ может быть параметром метода или атрибутом класса. Давайте рассмотрим следующий метод перед выполнением требуемого действия -
static void sayHello(String name) {
System.out.println(name);
}
Выполните следующие шаги, чтобы выполнить перенос типа -
Выберите тип данных «Строка».
Щелкните его правой кнопкой мыши и выберите Refactor → Type migration.

Введите требуемый тип данных в данное текстовое поле.
Выберите область и нажмите кнопку Refactor.