0

原始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)。不幸的是,我找不到办法做到这一点。

是否可以全部通过工具重构代码而不手动破坏它?

4

2 回答 2

3

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

  1. 选择if-else块。

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

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

  4. 给方法名称 - “randomChange”。您将看到它将totalas 参数传递给该方法。

  5. 单击“确定”。

您的代码将被分解为:

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块重构为有条件的。

于 2013-10-20T06:34:13.200 回答
3

强调这一点:

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

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

if/else -> ternary:一些方法可以将 if/else 语句更改为三元运算符,但它们不是由 IDE 提供的,而是由 Eclipse 等第三方插件提供的,这应该会有所帮助

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

@Downvoter:这是您使用当前重构工具可以获得的最接近的结果。正如评论部分提到的那样,没有神奇的“读我的想法”按钮。

于 2013-10-20T06:31:38.267 回答