2013-10-20 89 views
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)。不幸的是,我找不到办法。

是否有可能通过工具重构所有代码并且不需要手动将其分解?

+1

我不会考虑将7行方法拆分为两个方法,并将'if'更改为三元表达式 - 作为重构... – alfasin

+1

为什么你期望有人会提供重构工具来进行此特定更改?没有什么魔法“让代码按我期望的方式工具”,如果有的话,你(和我们大多数人)将失去工作。 –

+0

@alfasin,认为这是一个简化的示例 – Freewind

回答

3

突出这一点:

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

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

的if/else - >三元:的方式来改变if/else语句三元运营商,但他们不是由IDE,而是由第三方插件,例如用于Eclipse的这应该是help提供。

Local var - > return语句:至于“总”变量我不知道任何插件会这样做,Eclipse/Intellij没有这样的选项(至少我不是意识到一个)。他们可以用抽取局部变量来反过来。

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

+0

首先,谢谢,我不是downvoter :)我可以得到这个结果,但我想,如果我可以做更多与他们。 – Freewind

+1

@Freewind:你可以检查我更新的消息。你可以应付if/else使用插件。对于“带返回的替代变量”,恐怕不支持。虽然可能有一些插件。 –

+0

这是一个有用的建议! – Freewind

3

这里的重构,关于日食的一种方式,它不会真的给你想要的确切代码:

  1. 选择if-else块。

  2. 单击鼠标右键,并转到 “重构”

  3. 进入选项 - “提取方法”

  4. 给一个方法的名称 - “randomChange”。您会看到它将total作为参数传递给该方法。

  5. 点击“确定”。

你的代码将被rafactored这样:

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

+1

@Downvoter关注意见。 –

+0

我不明白这是谁downvoting这个东西...这是关闭你可以得到重构工具... –

+0

@RohitJain,谢谢你,我已经重构了代码完全一样的结果在你的答案。但我希望我可以从'randomChange'方法中删除'total'参数。可能吗? – Freewind