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

Java 在IDEA中,哪种快捷方式可以进行重构?,java,intellij-idea,refactoring,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' Sys

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中的一些重构捷径来完成这一切


一种可能的解决办法:

  • world
    方法内联到
    hello

    public void hello(MyFiles MyFiles){ //使用“sourceFile”和“targetFile”的非常长的方法 System.out.println(myFiles.getSourceFile()); System.out.println(myFiles.getTargetFile()); }

  • 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());
    }
    
    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);
    }
    
    接下来,在此行中使用“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)

    结果:

    public void hello(MyFiles myFiles) {
        world(myFiles);
    }
    
    private void world(MyFiles myFiles) {
        world(myFiles.getSourceFile(), 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);
    }
    
    请注意,您可以轻松编写一个插件,一步完成重构。如果您经常进行这种重构(或者如果它只是让您烦恼……),那么这将是推荐的方法