哪个快捷方式可以在 IDEA 中进行此重构



Java code:

public void hello(MyFiles myFiles) {
     world(myFiles.getSourceFile(), myFiles.getTargetFile());         
}
public void world(String sourceFile, String targetFile) {
    // a very long method that uses 'sourceFile' and 'targetFile'
    System.out.println(sourceFile);
    System.out.println(targetFile);
}

我想将其重构为:

public void hello(MyFiles myFiles) {
     world(myFiles);         
}
public void world(MyFiles myFiles) {
     File sourceFile = myFiles.getSourceFile();
     File targetFile = myFiles.getTargetFile()
    // a very long method that uses 'sourceFile' and 'targetFile'
    System.out.println(myFiles.getSourceFile());
    System.out.println(myFiles.getTargetFile());
}

如何通过Intellij-IDEA中的一些重构快捷方式来完成这一切?


一种可能的解决方案:

  1. world方法内联到hello

    public void hello(MyFiles myFiles) { 一个使用"源文件"和"目标文件"的很长的方法 System.out.println(myFiles.getSourceFile()); System.out.println(myFiles.getTargetFile());}

  2. hello的内容提取到新方法world,这将是我想要的

但是由于方法world很长,当我将其内联到hello中时,可能会浪费我一些时间来选择要提取的行,因此我正在寻找其他解决方案。

好吧,据我所知,您可以获得的最接近的是通过 4 个重构。

在此行上使用"提取方法"(ctrl-alt-m),并将新方法world 调用。

     world(myFiles.getSourceFile(), myFiles.getTargetFile());

结果:

public void hello(MyFiles myFiles) {
    world(myFiles);
}
private void world(MyFiles myFiles) {
    world(myFiles.getSourceFile(), myFiles.getTargetFile());
}

接下来,在此行上使用"inline"(ctrl-alt-n):

    world(myFiles.getSourceFile(), myFiles.getTargetFile());

结果:

private void world(MyFiles myFiles) {
    // a very long method that uses 'sourceFile' and 'targetFile'
    System.out.println(myFiles.getSourceFile());
    System.out.println(myFiles.getTargetFile());
}

现在,在myFiles.getSourceFile()上使用"提取变量"(ctrl-alt-v),myFiles.getTargetFile() ,对于所有匹配项。

结果:

private void world(MyFiles myFiles) {
    // a very long method that uses 'sourceFile' and 'targetFile'
    String sourceFile = myFiles.getSourceFile();
    String targetFile = myFiles.getTargetFile();
    System.out.println(sourceFile);
    System.out.println(targetFile);
}

请注意,您可以一步轻松编写一个插件来为您进行此重构。如果您经常进行此重构,这将是推荐的途径(或者如果它只是惹恼了您......

看看重构/提取/参数对象。靠近你需要的。

最新更新