重构方法/构造函数参数,以在IntelliJ中插入整个对象

时间:2017-10-25 11:10:32

标签: java intellij-idea

我想重构代码,以便将整个对象input作为参数而不是其部分input.getI(), input.getJ()传递。

我可以轻松地执行与Extract Parameter操作相反的操作,但是如何在IntelliJ中的代码库中重构它呢?

public static void main(String[] args) {
    Foo input = new Foo(0, 1);

    //What I have:
    new Bar(input.getI(), input.getJ());
    print(input.getI(), input.getJ());

    //What I want: 
    //new Bar(input);
    //print(input);
}

public static void print(int i, int j) {
    System.out.println(i + j);
}

public static class Foo {
    private int i;
    private int j;

    public Foo(int i, int j) {
        this.i = i;
        this.j = j;
    }

    public int getI() {
        return i;
    }

    public int getJ() {
        return j;
    }
}

public static class Bar {
    private int i;
    private int j;

    public Bar(int i, int j) {
        this.i = i;
        this.j = j;
    }
}

2 个答案:

答案 0 :(得分:4)

首先,为所需的方法/构造函数添加重载:

public static void print(Foo foo) { ... }
public Bar(Foo foo) { ... }

然后使用结构搜索并替换(编辑>查找>结构替换)以替换:

print($f$.getI(), $f$.getJ());

print($f$);

(如有必要,可通过点击“修改变量”将$f$约束为Foo类型,从列表中选择f,然后将“预期类型(正则表达式)”设置为“富“)

同样,替换:

new Bar($f$.getI(), $f$.getJ());

new Bar($f$);

答案 1 :(得分:-1)

  1. 转到Bar类定义,然后右键单击并选择 重构。
  2. 选择更改签名
  3. 删除旧参数( - )
  4. 使用完全限定名称(+)
  5. 添加新参数