哪种快捷方式可以在IDEA中进行重构?

时间:2014-01-05 11:57:25

标签: java intellij-idea refactoring

Java代码:

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){     //一个使用'sourceFile'和'targetFile'的很长的方法     的System.out.println(myFiles.getSourceFile());     的System.out.println(myFiles.getTargetFile()); }

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

  3. 但是由于方法world非常长,当我将其内联到hello时,可能会浪费我一些时间来选择我想要提取的行,所以我正在寻找其他解决方案。

2 个答案:

答案 0 :(得分:1)

嗯,据我所知,你最接近的是通过4次重构。

在此行上使用“extract method”(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()myFiles.getTargetFile()使用“提取变量”(ctrl-alt-v),用于所有事件。

结果:

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);
}

请注意,您可以轻松编写插件,只需一步即可为您完成此重构。如果你经常进行这种重构(或者只是让你烦恼的话......),那将是推荐的路线。

答案 1 :(得分:0)

查看Refactor / Extract / Parameter Object。接近你需要的。