Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我刚提取一个参数时,有没有办法让Intellij用一个方法替换重复的代码?_Java_Intellij Idea_Refactoring - Fatal编程技术网

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

Java 当我刚提取一个参数时,有没有办法让Intellij用一个方法替换重复的代码?,java,intellij-idea,refactoring,Java,Intellij Idea,Refactoring,如果我运行重构来提取一个方法,intellij有时会注意到有类似的代码可以用这个新方法替换。在很多情况下,我的下一步是提取一个参数,现在有更多的地方可以使用这种方法。但是,当我提取一个参数时,intellij不会检查是否有新的重复代码。有办法做到这一点吗 第一步 步骤2 步骤3 正如评论所说,我如何让intellij意识到它现在可以调用print(“foo”)?一旦提取了方法,IntelliJ就没有足够的智能来根据提取的参数进行类似的重构。正如您所发现的,它只会将参数提取到提取方法的现有调用者中

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

第一步 步骤2 步骤3
正如评论所说,我如何让intellij意识到它现在可以调用
print(“foo”)

一旦提取了方法,IntelliJ就没有足够的智能来根据提取的参数进行类似的重构。正如您所发现的,它只会将参数提取到提取方法的现有调用者中

在步骤1中,通过如下更改
bar()
尝试预先设置提取方法:

public void bar() {
    String s = "bar";
    System.out.println(s); // extract method for this line
}
然后在第2步中,IntelliJ已经足够聪明,能够找出所有类似的重构

如果因为第一次提取方法重构已经完成并提交,所以您一直坚持将步骤2作为起点,那么将我上面所说的应用于
print()
方法(从中提取方法),您应该能够获得相同的结果。然后只需删除剩余的zero参数
print()

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
    }

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

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