干净易于阅读的代码可以使不熟悉程序的开发人员快速完整地理解程序从而使软件维护比其他方法更加有效了解 Eclipse V 中的新清理功能Eclipse V 比早期版本为开发人员提供了更多选项进行清理
编写干净代码有助于其他开发人员阅读理解和维护您编写的代码但是并不是所有人都赞成 漂亮精密 或 干净 等定义不同的开发人员拥有不同的风格和审美鑒赏力到现在为止Eclipse 通过少量修饰以一种简单的功能方式设定了导入代码的格式Eclipse V 中对这些操作进行了扩展从而提供了更宽泛的清理功能级别Eclipse V 允许您清除代码添加缺少的代码并应用某种编码样式向导将帮助您配置清理设置并将其存储起来以供稍后使用
我们将讨论清理的基本概念并提供有助于保持代码干净的工具的概览
用配置文件管理清理配置
某个具体的清理配置被称为一个 配置文件配置文件可以保存这样您就可以将设置提供给其他人或把来自早期项目和其他人的设置应用到当前代码中根据组织的编码约定配置文件可以应用于所有的 Eclipse 项目这样便可以在所有开发团队中获得相同的代码样式
Eclipse 首选项为配置文件提供了管理功能配置文件可被创建编辑和删除您可以指定在工作区中全局使用的配置文件当您第一次打开工作区首选项并浏览到 Java > Code Style > Clean Up 时您将看到活动配置文件 Eclipse [builtin]此内置配置文件已经过预先配置并且是随 Eclipse 一起交付的内置配置文件有两个Eclipse 和 Save Participant这两个配置文件定义了两个最小限度的清理配置可基本上删除不必要代码您可以通过将它们设为活动配置文件来查看这些内置配置文件的设置所有详细信息如详细信息区域所示
图 内置的详细信息
现有配置文件可作为各类模板使用并且可以扩展和定制这些模板因此从下拉式菜单中选择现有配置文件作为活动配置文件并单击 edit内置配置文件不能更改可以使用内置配置文件作为您自己的配置文件的基础或简单地将内置配置文件按原样应用到代码中
要创建您自己的配置文件请单击 New为配置文件命名并从下拉式菜单中选择现有配置文件进行初始化取消选中 Open the edit dialog now 并单击 OK
图 新建配置文件
要共享配置文件请使用导出功能要打开配置文件请单击 Edit然后单击 Export为配置文件命名然后单击 OK接下来就可以共享配置文件了
图 导出配置文件
要将 XML 文件中的外部配置应用到项目中必须先将其导入在主清理首选项中单击 Import选择文件然后单击 OK
清理类型
清理设置分为五个主要类别每个类别都显示在相应选项卡中选项卡由设置部分和预览部分构成预览用于立即显示设置对代码的影响尝试使用这些设置并观察预览中的代码发生怎样的变化以了解每种更改将怎样影响您的代码当您在主清理首选项中单击 Edit或在创建新配置文件时选择 Open the edit dialog now将弹出编辑所有这些设置的对话框
下面将讨论可用的设置及其优缺点由于许多设置可以风格各异因此将不提供任何推荐注意如果不选择具体选项您的代码将保持键入时的样子
Code Style
第一个选项卡用于处理编码样式并定义应当如何显示块表达式和变量声明
Control statements
选择Use blocks in if
while
for
and do
statements可定义使用大括号的位置大括号有助于提高代码可读性使用大括号时更易于看出哪些内容属于同一个单元在添加属于 if
或 else
条件的另一条语句时还可以帮助避免错误另一方面大括号太多会使代码变得臃肿并可能使代码难于处理
选择 Convert for loops to enhanced 将使用 for 循环符号这是由 Java; V 引入的用于减少代码注意此转换不具有向后兼容性
Expressions
选择 Use parentheses around conditions 可定义使用圆括号的位置对于圆括号请参阅以上关于大括号的讨论
Variable declarations
选择 Use modifier final where possible 可定义使用 final
关键字的位置final
修饰符不但可用于声明不能更改的变量而且还是强制永远设定私有字段的优秀选择final
修饰符对于性能健壮性和正确性至关重要
图 编码样式
Member Accesses
第二个选项卡允许您定义应当怎样访问类型成员
Non static accesses
需要使用 this
限定词访问字段或方法时选中该选项this
限定词帮助您快速查看哪些字段或方法是正在编写的当前类的成员它可以帮助您区分使用同一名称的字段和局部变量
Static accesses
使用复选框来定义限定设置可以通过声明类限定静态成员访问以更好地识别定义该成员的类型另一方面长类名可能使简单的成员访问变得臃肿并且使成员访问看上去不具有可读性或跨度多行代码
图 成员访问
Unnecessary Code
第三个选项卡允许您为删除未使用的代码和多余代码指定设置
Unused code
使用第一个复选框可以删除未使用的导入如果不使用 Organize imports 或 Strg+Shift+o 组合键则这样自动删除不使用的导入将帮助您使项目保持尽可能地小且没有任何未使用的库
使用第二个复选框可以删除未使用的私有成员私有成员只能在保存类中访问如果不使用私有成员则不需要它们私有成员只会增加编译器的开销重构代码后如果拥有大量未使用的遗留代码则删除会十分高效另一方面这样做会十分危险假定您在设计尚未使用但可能在将来使用的新方法的原型此清理选项如果处于激活状态将删除这些方法并且可能会错过重要的工作
Unnecessary code
使用第一个复选框来删除多余代码多余代码的存在会导致运行时的额外开销这取决于您使用的编译器
使用第二个复选框可以去掉多余的 $NONNLS$
标记这些标记仅由 Eclipse 使用来识别不应当具体化的字符串
图 多余代码
Missing Code
第四个选项卡允许您添加缺少代码
Annotations
定义要将哪些注释添加到代码中因为当使用不赞成使用的方法或者覆盖已标记方法未能正确覆盖某一个超类中的方法时Java V @Override
或 @Deprecated
注释将帮助编译器生成错误注意这些注释不具有向后兼容性
Potential programming problems
如果需要添加序列版本 ID则定义此设置对于实现 Serializable
接口的类建议这些类使用私有静态 final 变量定义一个序列版本 UID此变量可以自动生成它用于在反序列化过程中检查兼容性
图 缺失的代码
Code Organizing
第五个选项卡虽然位于最后但不可忽略其重要性它用于帮助您组织代码
Formatter
定义在代码清理内是否应当使用格式程序查阅格式程序首选项Preferences > Java > Code Style > Formatter
Imports
定义是否应当使用 Organize Imports查阅组织导入首选项Preferences > Java > Code Style > Organize Imports
Members
定义是否需要按字母序把成员分类有时将成员按字母序分类非常好可以更好地浏览代码不过也可能有人会反对这样做假定您将组织您的代码使彼此调用的方法靠近放置在一起以便于进行代码浏览排序可能会重新组织这些方法并且它们可能不是所需的顺序概览视图提供了一项优秀的功能用于给视图中的成员排序但是不能给代码中的成员排序具体配置和给成员排序的方法可以在 Preferences > Java > Appearance > Members Sort Order 中找到
图 代码组织
如何应用配置文件
在创建了清理配置文件后可以通过多种方法将其应用到代码中最简单的方法是在 Java 编辑器中打开上下文菜单并选择 Source > Clean Up
图 打开清理向导
此操作将打开清理向导如下所示
图 清理向导
向导将引导您完成清理选定源代码的过程左上的描述将显示将被清理的项目及编译单元的数目通常我们会将已配置的配置文件应用到编译单元中但是可以在应用代码清理之前先进行自定义如果需要查看某个设置影响代码的结果这可能十分有帮助
只要任何 Java 项目软件包或 Java 文件至少包含一个编译单元清理向导就可以在其中启动例如您可以选择工作区中的所有 Java 项目并启动向导执行清理将影响工作区中可以用选定配置文件重构的所有编译单元
默认情况下有一个用于整个工作区的全局清理配置文件但是也可以在项目属性中启用特定于项目的清理每个项目都可以有自己的清理配置文件要启用这种清理操作只需打开项目属性并浏览到 Java Code Style > Clean Up如下所示
图 应用配置文件
要预览清理结果请在清理向导中单击 Next这时向导将计算代码更改数目根据选定的编译单元数目完成此过程可能需要花费一段时间在下一个页面中将为您呈现将要应用的更改
图 预览结果
该树列出了将受清理影响的所有编译单元您可以进入到树中去选择编译单元的不同更改选择更改将在比较视图中显示初始源代码和经过重构的源代码在查看了更改后您可能不希望应用所有更改在这种情况下您可以简单地取消选中不必执行的更改单击 Finish 将执行整个清理操作
注意事项
诸如 Convert for loops to enhanced 或 Add missing annotations 之类的某些清理重构操作是与 Java 代码依从性 或 绑定的并且仅当源代码是根据要求的 Java 版本编译的才能应用清理向导允许您选择那些重构选项而不论使用的是哪一个 Java 版本因此如果您想知道没有转换 for
循环或者未能正确注释掉不赞成使用的方法的原因请在 Preferences > Java > Compiler 下查看工作区或项目的编译器依从级别
在多次运行清理向导并且配置文件已经正确设置后您可能不希望每次执行清理操作时都在向导中多次进行单击在这种情况下您只需在 Preferences > Java > Code Style > Clean Up 下的配置文件设置页面中禁用向导
图 隐藏/显示清理向导
在各种资源上执行代码清理通常会导致很多更改向导允许您在应用之前预览那些更改但是如果数百计文件都受到影响则会使预览不方便尤其是当您需要在预览过程中查找某个更改时使用过滤器选项可以缩小预览页面中显示的更改列表通常几乎所有文件都会受到源代码格式操作的影响但是添加缺失的不赞成注释影响的文件却不多在这种情况下过滤器将通过过滤其他更改来帮助您找到那些文件过滤器位于预览页面的右上角
图 应用过滤器
清理操作不但可以手动执行而且还可以在执行 Java 文件的保存操作期间执行要启用此功能请转到 Window > Preferences > Java > Editor > Save Actions 并选择附加操作请按前述配置清理操作然后就会在每次保存 Java 文件时都执行这些清理操作请注意执行那些操作有时会加大开销并且降低工作台的速度同时如果没有想到清理操作您可能会在保存刚刚编写的代码后觉得很困惑为什么代码不太一样
图 保存时执行清理
结束语
清理是一个极具实用性的工具它可以使您的代码看上去更舒服并且易于其他人快速理解代码它甚至可能使代码更健壮但是编码样式可以风格各异例如过去避免使用过多引号的程序员现在不需要在任何可能的位置使用代码块就是因为清理向导提供了该操作
清理不能解决概念问题或功能问题 —— 至少用当前版本的 Eclipse 还无法完成但是以清晰的方式显示代码可以省去很多工作向导附带的操作十分丰富并且涵盖了编码样式和约定的多个要点各个组织必须确定自己的样式和约定因此如果能对向导进行扩展将十分有帮助这在 Eclipse V 中还未实现清理概念不但在 Java 世界中十分有意义而且对于 C/C++PHPPythonPerl 等其他语言也会十分有用社区会如何采用这一特性?它的发展方向会是怎样呢?我想这些都会是十分有趣的
参考资料
学习您可以参阅本文在 developerWorks 全球站点上的 英文原文
查阅 Eclipse 推荐读物列表
Eclipse 新用户应当查阅 Eclipse 项目资源的新手入门
查阅 IBM developerWorks 的 Eclipse 项目资源 扩展 Eclipse 技巧
要收听针对软件开发人员的有趣访谈和讨论一定要访问 developerWorks podcast
要获得关于 Eclipse 平台的介绍性文章请参阅 linux/opensource/osecov/>Eclipse 平台入门
随时关注 developerWorks 的 技术事件和网络广播
查看免费的 developerWorks On demand demo 观看并了解 IBM 及开源技术和产品功能
查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会交易展览网络广播和其他 活动
访问 developerWorks 开放源码专区获得丰富的 howto 信息工具和项目更新帮助您用开放源码技术进行开发并与 IBM 产品结合使用
获得产品和技术
在 IBM alphaWorks 中查阅最新的 Eclipse 技术下载
从 Eclipse Foundation 下载 Eclipse Platform 及其他项目
下载 IBM 产品评估版本并开始使用 DB®Lotus®Rational®Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品
使用 IBM 试用软件 改进您的下一个开发项目这些软件可以通过下载或从 DVD 中获得
讨论
Eclipse Platform 新闻组 应当是讨论关于 Eclipse 的问题的第一站(选择此链接将启动默认的 Usenet 新闻阅读器应用程序并打开 eclipseplatform)
Eclipse 新闻组 中有很多参考资料适用于对使用和扩展 Eclipse 感兴趣的人员
参与 developerWorks blogs 并加入 developerWorks 社区<
作者简介
cellPadding=
width=
%
border=
> > alt=
src=
http://img
educity
cn/img_
/
/
/
gif
width=
%
>
Katrin Limpoeck src=http://imgeducitycn/img_///jpg align=left valign=top>
alt=
src=
http://img
educity
cn/img_
/
/
/
gif
width=
>
%
>
Katrin Limpoeck 是德国 Boeblingen 的 IBM 开发实验室的软件工程师她拥有帕桑 (Passau) 大学的计算机科学硕士学位在 年加入 IBM 德国之前她参与了多个软件工程项目她所感兴趣的领域包括业务流程管理面向服务的架构Java 开发和 Eclipse
cellPadding= width=% border=> > alt= src=http://imgeducitycn/img_///gif width=%>
alt= src=http://imgeducitycn/img_///jpg width= align=left>
alt=
src=
http://img
educity
cn/img_
/
/
/
gif
width=
>
%
>
Philipp Tiedt 是德国 Boeblingen 的 IBM 开发实验室的软件工程师他从 Open University 获得了计算机科学的学士学位在 年加入 IBM 德国公司之前他在纽约 Hawthorne 的 IBM TJ Watson Research Center 完成了毕业设计他感兴趣的领域是 Eclipse用户界面设计Java 技术和面向服务的架构