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

wbgh16ku  于 2023-05-21  发布在  Java
关注(0)|答案(3)|浏览(128)

我想重构代码,使整个对象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;
    }
}
ssgvzors

ssgvzors1#

首先,为你想要的方法/构造函数添加重载:

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

然后使用结构化搜索和替换(编辑>查找>结构化替换)来替换:

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

print($f$);

(If必要时,通过单击“编辑变量”将$f$约束为Foo类型,从列表中选择f,并将“预期类型(regexp)”设置为“Foo”)
同样,替换:

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

new Bar($f$);
k3fezbri

k3fezbri2#

首先使用Ctrl+Alt+M提取一个方法,只调用print(input.getI(), input.getJ());
IntelliJ将整个对象作为print(Foo foo)提取方法
然后使用Ctrl+Alt+N内联旧的public static void print(int i, int j)方法

b4wnujal

b4wnujal3#

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

相关问题