Java intellij-move实例方法中如何快速重构

Java intellij-move实例方法中如何快速重构,java,intellij-idea,refactoring,Java,Intellij Idea,Refactoring,在Intellij中,按照(重构)步骤将java实例方法重构到另一个类的最快的方法是什么 例如: public class Bar { public String getX(){ return "x"; } } public class Foo { } public class Runner { public static void main(String[] args) { new Bar().getX(); } } 重构到

在Intellij中,按照(重构)步骤将java实例方法重构到另一个类的最快的方法是什么

例如:

public class Bar {
    public String getX(){
        return "x";
    }
}

public class Foo {
}

public class Runner {
    public static void main(String[] args) {
        new Bar().getX();
    }
}
重构到:

public class Bar {
}

public class Foo{
    public String getX(){
        return "x";
    }
}
public class Runner {
    public static void main(String[] args) {
        new Foo().getX();
    }
}

您可以使用Shift+F6重命名类/方法/变量(只需选择名称并按热键),但您应该知道它不会删除或更改已存在的名称,因此您将获得一个重复的名称。在重命名Bar类之前,最好先删除Foo类。

在IntellJ IDEA 15中,您可以执行以下操作:

  • 方法
    getX()上的位置
  • 按Ctrl/Cmd+F6(更改签名)
  • 添加参数:Type=
    Foo
    ,name=
    Foo
    ,默认值=
    newfoo()
  • 按F6:移动方法
  • 选择
    Foo-Foo
    作为目标,然后按重构

  • 我不知道intellij的确切情况,但我可以想象,这不是一个可以自动完成的重构,或者至少不能以一种足够普遍的方式使它变得有用:应该在
    Foo
    的哪个实例上调用
    getX
    方法?
    Foo
    的实例并不重要
    new Foo()
    很好,或者如果程序中所有
    Foo
    的实例都是
    Foo
    那么
    Foo
    也很好。为什么不直接将类栏的名称重构为Foo(假设Foo不存在)呢?在这种情况下,这对您来说可能不重要,但在一般情况下会。我看不到一个足够广泛的用例来保证这是一个内置的重构。我只想喝杯咖啡然后开始窃听sed…:(如果这个方法真的像这里一样简单(我猜不是),那么可以让
    Bar.getX()
    调用静态方法
    Foo.getX()
    ,然后将所有调用内联到
    Bar.getX()