Eclipse:最有用的重构

44

http://www.ibm.com/developerworks/opensource/library/os-eclipse-refactoring/index.html - jitter
2
重构的参考书是马丁·福勒的《重构:改善既有代码的设计》。Eclipse实现了很多这样的功能,就像其他IDE(netbeans、IntelliJ)一样。对我来说,这是IDE的强项之一,也是不使用IDE开始编写Java的原因之一。 - Andreas Dolk
5
主观性强,没有一个确定的答案,话题应该标记为CW。 - BalusC
7
这个问题没有一个正确的答案,我建议将其设为社区维基页面。 - Nettogrof
我会重新表述这个问题 - 是否有任何Eclipse插件比Eclipse的“本地”重构更好或同样好? - Trick
13个回答

52

这是一个有趣的问题。我知道对我有效的方法,也很有趣看到其他人使用的方法。

我决定采用更科学的方法来确定最常用的重构命令。Eclipse内置了一个Usage Data Collector (UDC)功能。该数据是公开可用的。我提取了数据,并提取出以下图表,显示了最常用的编辑命令(不包括导航命令)。

alt text http://img.skitch.com/20091207-bmcng36rjy837sqmcx58b85age.gif

然而,我坚信“Save Actions”用于格式化和组织导入(请阅读我的文章),所以我不会计算那些命令。我还将删除注释命令。图片看起来像这样:alt text http://img.skitch.com/20091207-ieas1mk5114fwitucqkqxyw6t.gif


4
+1 做得好。非常有见地... - ewernli
2
太棒了!实证研究万岁! - akuhn
确实,非常酷的数据!但是,这取决于任何在Eclipse上编程的猴子的习惯。我们需要一个单独的数据库供真正的程序员学习。 - abyx
8
图片损坏了。 - Boann

30

重命名 - 因为给事物赋予有意义的名称是编写自我说明代码的最佳方法。 Shift+Alt+R

提取方法 - 每当一个方法过长时。 Shift+Alt+M

提取常量 - 因为神奇的数字很糟糕。 Shift+Alt+T (重构菜单,没有直接的快捷方式)。

内联/引入变量 - 从方法中删除混乱的内容。 Shift+Alt+I(内联),Shift+Alt+L(引入)


20

我的收藏夹(按使用顺序排列):

  1. 重命名(Alt-Shift-R,或 Ctrl-1 用于文件内快速重命名)
    可用于对变量、方法等进行重命名而不产生任何副作用。
  2. 提取变量(Ctrl-1Alt-Shift-L
    可将一行长度为100个字符的代码拆分为多个步骤。
  3. 提取方法(Alt-Shift-M
    可将某些代码制作成一个没有任何副作用的方法。
  4. 拆分变量声明(Ctrl-1
    当您在声明时初始化变量并且现在发现需要在try或if块中进行初始化时,这是一个好选择。
  5. 更改方法签名(Alt-Shift-C
    方法签名操作的万能工具,包括新参数的默认值。
  6. Pull Up / Push Down 将方法和变量拉到通用接口或超类中或将其推到子类中
  7. 提取接口/超类
    从当前类中提取接口或超类。非常方便。

+1 对于我不知道但喜欢的几个重构。 - Spina
Ctrl 1 对我不起作用。 - Koray Tugay
1
关于变量声明的拆分,您能否提及一下将声明移动到包含代码块之外(例如,移动到try-catch块之外)可以使用Alt+Up-Arrow组合键?我正在寻找这个功能,在这里没有找到,但在其他地方找到了。如果您能在答案中包含这个信息,那就太好了。 - Peter Perháč

7
我的最爱:
  1. 重命名
  2. 提取/下移
  3. 提取方法

5
最常见的重构已经被阐述了,我完全同意它们。 代码格式化程序SourceFormatCtrl + Shift + F)是我经常使用的IDE特性之一。虽然它不是重构,但它可以提高代码可读性,同时保持你的编码风格:只需前往首选项Java代码样式格式化程序并告诉Eclipse你想让你的代码看起来如何! 生成Getters和Setters也是一个我发现在编写Java Bean时节省时间的功能。

我绝对会使用CTRL+SHIFT+7(或/)来注释或取消注释行。 - Trick
1
顺便提一下(也许你已经知道或者由于某些原因无法使用)...你可以设置“保存操作”来自动为你格式化代码(以及其他一些功能)。我发现这对我很有帮助,因为不需要通过ctrl+shift+f手动格式化。 - javamonkey79

3

Eclipse在众多流行的IDE中可能拥有最少的重构功能。您可以考虑使用Netbeans或IntelliJ(社区版是免费的)。相反,Eclipse可能拥有最好的调试器。;)

我在编写代码时使用重构(我发现这样能加速编写大约15%),所以IntelliJ无需编译即可重构代码的能力对我非常有用。其他IDE现在可能也支持此功能(有人知道吗?) 我发现IntelliJ的智能完成更加智能。

我测试了从打印输出(最初在Eclipse中编写)重新输入文件,并发现在使用IntelliJ键入该文件时,键入的按键数减少了30%,鼠标移动次数减少了50%(与Eclipse相比)。我估计Netbeans位于中间水平。


2

我的收藏夹包括:

1) 重命名 - 它可以用于方法名称、变量名称、类名称、字段等任何名称。
2) 将匿名类转换为嵌套类 - 有助于调试,让您重复使用逻辑(例如比较器),而您只认为会在一个地方使用它。
3) 将成员类型转换为顶级类型 - 在将匿名类转换为嵌套类后,我经常发现该类在其他地方也很有用。这时候进行重构就非常完美。


1

我喜欢使用提取方法 (Alt+Shift+M),自从 3.6M1 版本以来,它现在可以处理包含 continue 语句的选择。

为了保留现有代码的语义,选择需要包括循环的最后一条语句。在提取的方法中,continue 语句将被更改为 return 语句:

使用 continue 的提取方法重构 http://download.eclipse.org/eclipse/downloads/drops/S-3.6M1-200908061400/images/extract-method-continue.png

对于在提取的方法中需要多个返回值的选择,Eclipse 现在会在错误消息中列出冲突的变量:

使用含有模棱两可返回值错误的提取方法重构 http://download.eclipse.org/eclipse/downloads/drops/S-3.6M1-200908061400/images/extract-method-multiple-return-values.png


1

我最常用的是重命名、提取方法和更改方法签名,按照这个顺序。


1

在红色下划线部分按CTRL + 1,即快速修复。


2
我认为“快速修复”不能被归类为重构。 - Adrian
1
我同意Adrian的观点 - 快速修复只会改变代码的行为,而不是重构。 - Hardcoded

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接