原文:http://hi.baidu.com/twlk28/blog/item/f3ca4d905f1c6696a877a462.html
简介: Eclipse提供了通过定义和使用代码模板来提高工作效率与代码可预测性的能力。本文介绍的这个技巧向您展示了如何编辑现有的代码模板以及如何定义新的代码模板。它还包括了几个内置变量的例子,以便您可以看到在编辑器中这些内置变量被解析成什么内容。
问题
无论您的项目或团队的规模有多大,在编辑代码库时,都会遇到如下的两个问题:
缺乏一致性—当团队中的很多人编辑文件时,难免会有编码上的些许差异,但这些差异会使代码变得难于读懂和维护。这种情况下,很难搜索到代码差异在何处发生。即便代码是您一个人写的,如果您忘记了前面代码是如何编写的,那么差异也很有可能发生。工作效率不高—减少按键次数可以节省很多时间,因为编辑代码的主要工作还是打字。键入或是复制、粘贴大段的代码以使其适于当前的上下文会花费很多时间。
在使用模板前,一个常用的、手动提高代码一致性和工作效率的方法就是复制和粘贴。通过在现有的代码库 — 或是 Internet —上进行搜索并复制最接近您想要实现的功能的代码。然后再根据您的具体应用程序的需要对其进行部分修改。
解决方案:使用模板
Eclipse 中的模板是预先定义的代码清单,其中会包含一些在使用时不会改变的代码。例如,Java™代码中的for循环都是用相同的方法构建的,无论该循环用在何处,除非是循环的inside条件或变量有所变化。一个模板总是包含一些不变的部分,并为需要改变的部分使用变量。
Eclipse 中的模板是预先定义的代码清单,其中会包含一些在使用时不会改变的代码。例如,Java™代码中的for循环都是用相同的方法构建的,无论该循环用在何处,除非是循环的inside条件或变量有所变化。一个模板总是包含一些不变的部分,并为需要改变的部分使用变量。
使用 Eclipse中的模板是解决一致性和工作效率问题的一种很好的方法。有了模板,您只需编写一次代码就可以放心地将它应用于整个应用程序了。您甚至可以不用再去想它,这也是使用模板的一个优势。
本文将介绍如何:
调用模板编辑模板创建模板利用模板中的变量导出模板导入模板
调用模板
调用模板十分容易。当在编辑器中进行输入时,开始键入模板的名称并使用 Ctrl+Space来调用代码完成功能。名称与所键入内容相匹配的模板就会出现在列表中(参见图 1)。
图1. 从列表中选择模板
如果再次按 Ctrl+Space,Eclipse 就会循环遍历模板的类型。
要插入一个模板,使用箭头键从列表中选择此模板并按Enter。也可以使用鼠标双击出现在列表内的模板的名称。
模板插入后,您可以键入各变量的值。使用 Tab 键来从一个变量转到另一个变量。
编辑模板
要编辑一个模板,需要通过选择 Window >Preferences 打开 Eclipse Preferences。转到 Java> Editor > Templates以查看现有的模板。要编辑一个现有的模板,单击列表中的这个模板并单击Edit。Edit Template窗口会随即出现(参见图2)。
图2. 编辑模板
表 1 列出了 Edit Template 窗口中的各字段。
Name | 模板的名称 |
Context | 模板的上下文。Eclipse 将模板的选择限定于对该上下文有效的那些模板。比如,如果编辑的是 XML 文件,那么绝对不会出现Java 语句。 |
Automatically insert | 如果选中,Eclipse 在模板的全部名称输入完毕且调用了模板插入后(比如按Ctrl+Space)自动插入一个模板。 |
Description | 描述模板并会出现在下拉列表中。描述有助于识别该模板,因为模板名称并不需要惟一。 |
Pattern | 作为模板插入的实际代码,包括需要 Eclipse 解析的全部变量。 |
可以编辑模板的值,并且在完成编辑后,单击 OK。要在编辑模板的同时插入一个内置的变量,可以单击Insert Variable。查阅 “Taking advantage of variablesin templates” 更多地了解可用的变量。
创建一个模板
要创建一个模板,单击 New。根据 “编辑一个模板” 部分中的介绍编辑值并且在完成后单击OK。新模板现在出现在列表内。在完成后,单击 OK 以编辑文件。
利用模板内的变量
使用模板的一个最大的挑战是要知道当被插入到代码内时这些内置变量被解析成什么。这些变量可自动插入诸如当前类型名称、光标位置或所选值这样的内容。变量会使模板更为动态并会减少在模板插入后需要对模板进行的手动更改的工作量。
以清单 1 内的模板代码为例。
清单1. 面向登录声明的模板
${imp:import(java.util.logging.Logger)} private static Loggerlogger = Logger.getLogger(${enclosing_type}.class.getName()); |
在被插入到 Automobile 类后,代码将如清单2 所示。
清单2. 在插入登录声明后的 Automobile类
private static Logger logger =Logger.getLogger(Automobile.class.getName()); |
可以看到,类的名称已经为您解析好了。这无疑好过复制粘贴方式,因为在后一种方式中,您很可能会忘记更新类的名称。由于在声明中即便有不正确的类名,也不会抛出编译错误,因此您很可能发现不了这个错误,直到您查看日志才会奇怪为什么这些声明没有在它们该在的位置。
此 Logger 的导入声明是自动地为 Logger 添加在这个类的顶端的。
表 2 列出并描述了 Eclipse 所带的针对这些 Java 模板的内置变量。
表2. Eclipse 针对 Java 模板的内置变量
cursor | 将编辑器的光标放在这个位置。 | N/A |
date | 插入当前日期。 | Oct 20, 2009 |
dollar | 插入货币的文字符号。 | $ |
elemType | 尝试猜测具有给定 ID 的这个元素的类型。 | MyType |
enclosing_method | 插入模板被插入其中的那个方法的名称。 | method() |
enclosing_method_arguments | 为包围方法插入参数。 | arg1, arg2 |
enclosing_package | 插入当前类的包名。 | com.example.ui |
enclosing_project | 插入包含所编辑的这个类的项目的名称。 | myProject |
enclosing_type | 插入正在编辑的类型(类)的名称。 | MyType |
exception_variable_name | 插入一个异常变量名称,进行最佳猜测。 | e, ioe |
file | 文件的简称。 | MyType.java |
import | 如果尚未导入,那么针对给定类型插入一个导入声明。 | importcom.example.ui.MyOtherType |
importStatic | 与 import相同,只不过是静态导入。 | import staticcom.example.ui.MyOtherType.* |
line_selection | 将选中的行插入到这里。这对用模板包装行是很有用的。 | 以选中行作为主体的 do、while 循环 |
primary_type_name | 没有扩展名的文件简称。 | MyType |
time | 插入当前的时间。 | 9:09:35 a.m. |
todo | 注释中的 TODO 标记。 | TODO |
user | 当前用户的名字。 | ngood |
var | 解析为本地变量,如果不只一个,就提供一个列表。 | myvar |
word_selection | 插入当前选中的单词。 | N/A |
year | 将现在的年份插入到代码中。 | 2009 |
变量的另一个很棒的特性就是您可以自己创建一个。它们并不会自动地解析成任何值。不过,在模板插入后,您即可以将值输入到模板内。在键入到变量中时,所键入的值就会被插入到该变量出现在代码中的所有位置。请看清单3 中的模板。
清单3. 创建您自己的变量
public void test${my_variable}() { String expected = "value";${my_object}.set${my_variable}(expected);assertEquals("${message}", expected,${my_object}.get${my_variable}); } |
在插入了模板后,它应该类似图 3。
图3. 自动插入值
您只需要键入第一个值,其余的值会自动替换。完成后,按 Tab 移到下一个变量。
导出模板
为了与他人共享模板,可以将这些模板导出到一个文件。这个文件是一个 XML 文件,内含模板信息并可被导入到 Eclipse的其他实例。
要导出一个模板,选中此模板并单击 Export。Eclipse会提示您提供保存此文件的位置。完成导出模板后,单击OK 关闭这个Preferences窗口。
导入模板
还可以从包含有导出模板的这个文件中导入模板。要导入一个模板,单击Import。Eclipse会提示您给出要从中导入的文件。
在导入想要的模板后,单击 OK。现在您就可将新的模板导入到编辑器中了。
结束语
Eclipse内的代码模板是一种提高工作效率和应用程序一致性的有效方式。您可以构建自己使用的代码模板以便能够在编辑代码的同时轻松地将常用部分插入到您的代码内。您还可以在代码内定义变量以便自动地将类型的名称、方法甚至是选中的代码插入到您的模板内。有了自己喜欢的模板后,就可以通过将模板导出和导入到Eclipse 来共享这些模板。