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

时间:2015-02-12 19:54:18

标签: java android intellij-idea refactoring

这就是我想做的事情。我们说我有这段代码:

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

  ...
}

这不是我想要的。

1 个答案:

答案 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 |提取|方法对象。您还可以选择创建内部类或匿名类。希望这会有所帮助。