当我刚刚提取参数时,有没有办法让Intellij用方法替换重复的代码?

时间:2015-01-29 22:28:35

标签: java intellij-idea refactoring

如果我运行重构来提取方法,intellij有时会注意到有类似的代码可以用这个新方法替换。在很多情况下,我的下一步是提取一个参数,现在有更多的地方可以使用这个方法。但是,当我提取参数时,intellij不会检查是否有新的代码重复。有没有办法做到这一点?

第1步

package mavensandbox;

public class Main {


    public void foo() {
        System.out.println("foo");
    }

    public void bar() {
        System.out.println("bar");  //I will extract method for this line
    }

}

第2步

package mavensandbox;

public class Main {


    public void foo() {
        System.out.println("foo");
    }

    public void bar() {
        print();
    }

    private void print() {
        System.out.println("bar");  //doh, I wanted "bar" to be a parameter, that's the next step
    }

}

第3步

package mavensandbox;

public class Main {


    public void foo() {
        System.out.println("foo");  //ok, so how do I get intellij to realize it can now call print("foo"); instead?
    }

    public void bar() {
        print("bar");
    }

    private void print(String s) {
        System.out.println(s);
    }

}

正如评论所说,我如何让intellij意识到它现在可以调用print("foo");

1 个答案:

答案 0 :(得分:2)

一旦提取了方法,IntelliJ就不够聪明,无法根据提取参数来计算出类似的重构。正如您所发现的那样,它只会将参数提取到提取方法的现有调用者中。

在第1步中,请提前设置提取方法,方法是更改​​bar()

public void bar() {
    String s = "bar";
    System.out.println(s); // extract method for this line
}

然后在第2步中,IntelliJ已经足够聪明,可以找出所有类似的重构。

如果您坚持使用第2步作为起点,因为第一个提取方法重构已经完成并提交,请将我上面所说的应用到print()方法(从中提取方法),然后你应该能够达到同样的效果。然后你只需删除剩余的零参数print()