如何使用重构工具安全地重构代码?

时间:2013-10-20 06:27:32

标签: java eclipse intellij-idea refactoring

原始Java代码:

public int test() {
    int total = 100;
    if (new Random().nextInt(2) < 1) {
        total += 1;
    } else {
        total -= 2;
    }
    return total;
}

重构后的预期代码:

public int test() {
    return 100 + randomChange();
}

private int randomChange() {
    return new Random().nextInt(2) < 1 ? 1 : -2;
}

我可以手动更改代码,但我想回复IDE的重构工具(例如IDEA或eclipse)。不幸的是,我找不到办法。

是否可以通过工具重构代码并且不需要手动破解它?

2 个答案:

答案 0 :(得分:3)

突出显示:

if (new Random().nextInt(2) < 1) {
    total += 1;
} else {
    total -= 2;
}

提取方法:并使用提取方法 ALT + SHIFT + M 对于Eclipse和 CTRL + ALT + M 对于Intellij iirc,但请仔细检查!)。您仍然需要进行一些手动重构,因为默认情况下,您希望将“total”作为参数传递并返回更改的值。

If / else - &gt;三元: 将if / else语句更改为三元运算符的方法,但它们不是由IDE提供的,而是由第三方插件提供的,例如Eclipse,这应该是{{3 }}

本地var - &gt; return语句:至于“total”变量我不知道有任何插件可以做到这一点而Eclipse / Intellij没有这样的选项(至少我不知道一个)。他们可以通过提取局部变量来反过来。

@Downvoter:这是目前重构工具最接近的。正如评论部分所提到的,没有神奇的“读我的思绪”按钮。

答案 1 :(得分:3)

这是一种在eclipse上重构的方法,它实际上不会提供你想要的确切代码:

  1. 选择if-else块。

  2. 右键单击,然后转到“重构”

  3. 转到选项 - “提取方法”

  4. 提供方法名称 - “randomChange”。您将看到它将total作为参数传递给方法。

  5. 点击“确定”。

  6. 您的代码将受到严重影响:

    public int test() {
        int total = 100;
        total = randomChange(total);
        return total;
    }
    
    private int randomChange(int total) {
        if (new Random().nextInt(2) < 1) {
            total += 1;
        } else {
            total -= 2;
        }
        return total;
    }
    

    但是,我认为没有办法将if-else块重构为条件。