前言

idea自带了重构功能,利用好idea的重构功能,可以大幅提高编码效率和代码质量。

常用的重构技巧

字段/变量批量重命名

Refactor -> Rename可以查看快捷键,将光标移动到要重命名的地方或者选中,然后按快捷键,然后输入新的名字,最后回车即可。这样所有用到的地方都会自动被重命名。

int aa =0;int total = aa + 10;选中aa,按快捷键(Windows为alt+shift+r),然后输入新的名字,比如num,容纳后回车。int num =0;int total = num + 10;

重命名Class文件

方法和重命名字段/变量一样

添加方法字段

比如有方法:

private static void print(String abc) {    System.out.println("abc = " + abc);}

在调用的时候想再添加一个int类型的参数,怎么做?




idea如何给java文件重命名 idea文件怎么重命名_重命名


可以直接在调用的地方,写上要加的参数的值,然后按ALT+ENTER,选择Add xx as ...即可。

抽取重复的值为变量

比如有如下调用:

Date d1 = DateUtil.parse("2020-09-01", "yyyy-MM-dd");Date d2 = DateUtil.parse("2020-09-02", "yyyy-MM-dd");Date d3 = DateUtil.parse("2020-09-03", "yyyy-MM-dd");

可以看到,yyyy-MM-dd是一样的,可以进行抽取为一个变量。

选中"yyyy-MM-dd",执行Refactor->Extract->Variable(alt+shift+L)操作。


idea如何给java文件重命名 idea文件怎么重命名_重命名_02


这里有2个选择:替换选中的地方和替换所有出现的地方。选择替换所有出现的地方即可。

抽取重复的值为常量

还是上面的例子,选中"yyyy-MM-dd",执行Refactor->Extract->Constant(ctrl+alt+C)。


idea如何给java文件重命名 idea文件怎么重命名_重命名_03


选择PATTERN,这样就会在当前类中定义一个常量:public static final String PATTERN = "yyyy-MM-dd";

将变量添加为方法参数

比如在方法中定义了变量boolean parse = false;如果要将parse添加为方法参数,光标定位到parse,执行Refactor->Extract->Parameter(CTRL+ALT+P),改变量就会成为方法参数。


idea如何给java文件重命名 idea文件怎么重命名_idea如何给java文件重命名_04


将多个方法参数抽取为一个对象作为方法的参数

比如:

private static void print(String name, int age, boolean parse) throws ParseException {    System.out.println("name = " + name + ",age=" + age);    Date d1 = DateUtil.parse("2020-09-01", PATTERN);    Date d2 = DateUtil.parse("2020-09-02", PATTERN);    Date d3 = DateUtil.parse("2020-09-03", PATTERN);}

如果要将方法的多个参数抽取一个参数对象,执行Refactor->Extract->Parameter Objet。


idea如何给java文件重命名 idea文件怎么重命名_方法参数_05


这里默认是选择所有的方法参数,作为Class的字段,你可以根据需要选择。比如这里只选择了name和age。

然后点Refactor,生成的MyParamterObj如下:

public class MyParameterObj {    private final String name;    private final int age;    public MyParameterObj(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public int getAge() {        return age;    }}

原来的方法变为:

private static void print(MyParameterObj myParameterObj, boolean parse) throws ParseException {    System.out.println("name = " + myParameterObj.getName() + ",age=" + myParameterObj.getAge());    Date d1 = DateUtil.parse("2020-09-01", PATTERN);    Date d2 = DateUtil.parse("2020-09-02", PATTERN);    Date d3 = DateUtil.parse("2020-09-03", PATTERN);  }

原来的name和age参数变为了MyParameterObj。

该方法调用的地方也变为了:

print(new MyParameterObj("jack", 13), false);

该重构功能,在方法参数很多的时候,是一个非常有用的功能。

从类中抽取方法作为接口

执行Refactor->Extract->Interface,然后选择要作为接口的方法列表


idea如何给java文件重命名 idea文件怎么重命名_idea如何给java文件重命名_06


点Refactor后,当前类会实现刚刚抽取的接口。

public class Test2 implements MyTestService {    // ...}

创建的接口如下:

public interface MyTestService {    void sayHello(String name);}

这也算是一个比较实用的功能。

还有提取方法作为Super Class的方法、将方法用包装类进行包装就不一一介绍了,和抽取方法作为接口方法差不多。