这是我想做的。假设我有这样的代码:
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->Extract->Delegate,但在这种情况下,IntelliJ将setA和setB方法留在Bar中,而不更改Foo:中的代码
public class Bar {
private Container container;
public void setA(int a) { container.setA(a); }
public void setB(int b) { container.setB(b); }
...
}
这不是我想要的。
选择类栏中的一段代码。。。
private int a;
private int b;
public void setA(int a) { this.a = a; }
public void setB(int b) { this.b = b; }
在主菜单上,或从所选内容的上下文菜单中,选择"重构|提取|方法对象"。您还可以选择创建内部类或匿名类。希望这能有所帮助。