Intellij-使用委托类重构getter和setter



这是我想做的。假设我有这样的代码:

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

在主菜单上,或从所选内容的上下文菜单中,选择"重构|提取|方法对象"。您还可以选择创建内部类或匿名类。希望这能有所帮助。

最新更新