这就是我想做的事情。我们说我有这段代码:
public class Foo {
private Bar bar = new Bar();
public void doWork() {
bar.setA(5);
bar.setB(10);
}
}
public class Bar {
private int a;
private int b;
public void setA(int a) { this.a = a; }
public void setB(int b) { this.b = b; }
...
}
我想将Bar中的成员a和b提取到一个单独的Container类中,最后得到这个代码。请注意,Foo不再在bar上调用setA,而是请求容器并在其上调用setter:
public class Foo {
private Bar bar = new Bar();
public void doWork() {
bar.getContainer.setA(5);
bar.getContainer.setB(10);
}
}
public class Bar {
private Container container;
public Container getContainer() { return container; }
...
}
public class Container {
private int a;
private int b;
public void setA(int a) { this.a = a; }
public void setB(int b) { this.b = b; }
...
}
有没有办法在IntelliJ中执行此操作?
我可以尝试使用Refactor - >提取 - >委托,但在这种情况下,IntelliJ在Bar中留下setA和setB方法,并且不会改变Foo中的代码:
public class Bar {
private Container container;
public void setA(int a) { container.setA(a); }
public void setB(int b) { container.setB(b); }
...
}
这不是我想要的。
答案 0 :(得分:1)
在类栏中选择一段代码......
private int a;
private int b;
public void setA(int a) { this.a = a; }
public void setB(int b) { this.b = b; }
在主菜单上,或从选择的上下文菜单中,选择Refactor |提取|方法对象。您还可以选择创建内部类或匿名类。希望这会有所帮助。