详解 Eclipse 中的快速 Java 编码(代码模板)

http://hi.baidu.com/twlk28/blog/item/f3ca4d905f1c6696a877a462.html

简介: Eclipse 提供了通过定义和使用代码模板来提高工作效率与代码可预测性的能力。本文介绍的这个技巧向您展示了如何编辑现有的代码模板以及如何定义新的代码模板。它还包括了几个内置变量的例子,以便您可以看到在编辑器中这些内置变量被解析成什么内容。


问题

无论您的项目或团队的规模有多大,在编辑代码库时,都会遇到如下的两个问题:

缺乏一致性— 当团队中的很多人编辑文件时,难免会有编码上的些许差异,但这些差异会使代码变得难于读懂和维护。这种情况下,很难搜索到代码差异在何处发生。即便代码是您一个人写的,如果您忘记了前面代码是如何编写的,那么差异也很有可能发生。工作效率不高— 减少按键次数可以节省很多时间,因为编辑代码的主要工作还是打字。键入或是复制、粘贴大段的代码以使其适于当前的上下文会花费很多时间。

代码模板
尽管代码模板是提高工作效率的一个理想途径,但需要确保不能用模板来替代真正的重用,即编写方法或函数以便将它们用于许多位置。如果您有一大段代码,那么最好在使用代码模板前先考虑采用带有变量的各种方法。


在使用模板前,一个常用的、手动提高代码一致性和工作效率的方法就是复制和粘贴。通过在现有的代码库 — 或是 Internet — 上进行搜索并复制最接近您想要实现的功能的代码。然后再根据您的具体应用程序的需要对其进行部分修改。


解决方案:使用模板

Eclipse 中的模板是预先定义的代码清单,其中会包含一些在使用时不会改变的代码。例如,Java™ 代码中的for循环都是用相同的方法构建的,无论该循环用在何处,除非是循环的 inside 条件或变量有所变化。一个模板总是包含一些不变的部分,并为需要改变的部分使用变量。

Eclipse 中的模板是预先定义的代码清单,其中会包含一些在使用时不会改变的代码。例如,Java™ 代码中的for循环都是用相同的方法构建的,无论该循环用在何处,除非是循环的 inside 条件或变量有所变化。一个模板总是包含一些不变的部分,并为需要改变的部分使用变量。

使用 Eclipse 中的模板是解决一致性和工作效率问题的一种很好的方法。有了模板,您只需编写一次代码就可以放心地将它应用于整个应用程序了。您甚至可以不用再去想它,这也是使用模板的一个优势。

本文将介绍如何:

调用模板编辑模板创建模板利用模板中的变量导出模板导入模板

调用模板

调用模板十分容易。当在编辑器中进行输入时,开始键入模板的名称并使用 Ctrl+Space 来调用代码完成功能。名称与所键入内容相匹配的模板就会出现在列表中(参见图 1)。


图 1. 从列表中选择模板
详解 <wbr>Eclipse <wbr>中的快速 <wbr>Java <wbr>编码(代码模板)

如果再次按 Ctrl+Space,Eclipse 就会循环遍历模板的类型。

要插入一个模板,使用箭头键从列表中选择此模板并按 Enter。也可以使用鼠标双击出现在列表内的模板的名称。

模板插入后,您可以键入各变量的值。使用 Tab 键来从一个变量转到另一个变量。

编辑模板

要编辑一个模板,需要通过选择 Window > Preferences 打开 Eclipse Preferences。转到 Java > Editor > Templates以查看现有的模板。要编辑一个现有的模板,单击列表中的这个模板并单击 EditEdit Template窗口会随即出现(参见图 2)。


图 2. 编辑模板
详解 <wbr>Eclipse <wbr>中的快速 <wbr>Java <wbr>编码(代码模板)

表 1 列出了 Edit Template 窗口中的各字段。

   
Name 模板的名称
Context 模板的上下文。Eclipse 将模板的选择限定于对该上下文有效的那些模板。比如,如果编辑的是 XML 文件,那么绝对不会出现 Java 语句。
Automatically insert 如果选中,Eclipse 在模板的全部名称输入完毕且调用了模板插入后(比如按 Ctrl+Space)自动插入一个模板。
Description 描述模板并会出现在下拉列表中。描述有助于识别该模板,因为模板名称并不需要惟一。
Pattern 作为模板插入的实际代码,包括需要 Eclipse 解析的全部变量。

可以编辑模板的值,并且在完成编辑后,单击 OK。要在编辑模板的同时插入一个内置的变量,可以单击 Insert Variable。查阅 “Taking advantage of variables in templates” 更多地了解可用的变量。

创建一个模板

要创建一个模板,单击 New。根据 “编辑一个模板” 部分中的介绍编辑值并且在完成后单击 OK。新模板现在出现在列表内。在完成后,单击 OK 以编辑文件。

利用模板内的变量

使用模板的一个最大的挑战是要知道当被插入到代码内时这些内置变量被解析成什么。这些变量可自动插入诸如当前类型名称、光标位置或所选值这样的内容。变量会使模板更为动态并会减少在模板插入后需要对模板进行的手动更改的工作量。

以清单 1 内的模板代码为例。


清单 1. 面向登录声明的模板

${imp:import(java.util.logging.Logger)} private static Logger logger = 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 如果尚未导入,那么针对给定类型插入一个导入声明。 import com.example.ui.MyOtherType
importStatic 与 import 相同,只不过是静态导入。 import static com.example.ui.MyOtherType.*
line_selection 将选中的行插入到这里。这对用模板包装行是很有用的。 以选中行作为主体的 dowhile 循环
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. 自动插入值
详解 <wbr>Eclipse <wbr>中的快速 <wbr>Java <wbr>编码(代码模板)

您只需要键入第一个值,其余的值会自动替换。完成后,按 Tab 移到下一个变量。

导出模板

为了与他人共享模板,可以将这些模板导出到一个文件。这个文件是一个 XML 文件,内含模板信息并可被导入到 Eclipse 的其他实例。

要导出一个模板,选中此模板并单击 Export。Eclipse 会提示您提供保存此文件的位置。完成导出模板后,单击OK 关闭这个Preferences 窗口。

导入模板

还可以从包含有导出模板的这个文件中导入模板。要导入一个模板,单击Import。Eclipse 会提示您给出要从中导入的文件。

在导入想要的模板后,单击 OK。现在您就可将新的模板导入到编辑器中了。

结束语

Eclipse 内的代码模板是一种提高工作效率和应用程序一致性的有效方式。您可以构建自己使用的代码模板以便能够在编辑代码的同时轻松地将常用部分插入到您的代码内。您还可以在代码内定义变量以便自动地将类型的名称、方法甚至是选中的代码插入到您的模板内。有了自己喜欢的模板后,就可以通过将模板导出和导入到 Eclipse 来共享这些模板。



   每次写一个小的测试类时都要输入下面这个main方法:

public static void main(String[]args) {

}

   手工输入几十个字符,烦不胜烦。我之前已经知道System.out.println()可以通过输入syso,然后按 Alt+/ 直接生成(你可以自己尝试下,这个代码模板默认已经设置了)

   那我现在想当我输入 psvm,然后按Alt+/ 就直接生成上面那段我该怎么做呢?

   本文的标题已经提供了解决方案,eclipse有一个强大的功能 — 代码模板。我们中有多少人接触过这个功能呢?接触过又有多少人自己结合自己的代码编写习惯配置过一些代码模板呢?

   我以前也没有,不过今天感觉非常有必要研究下这玩意,所以就有了这篇文章。

   废话少说,直接进入正题。

   在eclipse下,选择Windows->Preferences->Java->Editor->Templates,即进入下面这个界面:

   在右边随便选中一行,然后点Edit按钮,进入下面这个编辑面板界面:

   上面是我自己配置的”psvm代码模板“(即main方法语句块)。

   编辑面板是核心关注对象,因为一切东西都在这里面配置。先来熟悉下这个面板中关键的五项分别是什么。

   A. Name:名称,其实就是以后可以用到的代码缩写

   B. Context:模板上下文,指定该代码模板在什么地方才能生效,对于Java至少包含这么四个:Java type members、Java statements、Java和Java doc

       Java type members,模板对应的代码是类成员,psvm模板严格来说应该选择这个

       Java statements,模板对应的代码是语句块

       Java,最通用的,只要是Java代码就行

       Java doc,顾名思义了

   C. 模板变量:eclipse已经预置了一些模板变量(点Insert Varibles可以看到所有预置变量),如 ${cursor}是表示光标,${date}表示当前日期字符串,${time}表示当前时间字符串,

       ${line_selection}让当前行被选中, ${word_selection}让当前单词被选中,${cursor}是光标等等。当然我们也可以定义自己的模板变量,比如我定义一个 ${myTemplateVarible}

       那么对应代码显示的就是 myTemplateVarible。

   D. Pattern:代码模板对应的模式,按照你希望代码的格式逐个输入即可

   现在我们在第一个界面选择new,即可以创建自己的代码模板。

 

其他应用: 

   比如在写Java代码时,我们常常需要给类添加类似的注释,比如@author xxx,@version 1.0等等,使用代码模板可以很容易解决。

 

后记:

   软件工程几大要素之一就是工具,工具的高效使用能极大地节省成本。尽可能地了解你的工具并发挥工具的最大潜能,是一个不可忽视的目标。
   本文只对Java代码模板进行了粗浅的介绍,其实代码模板在编写HTML代码时有更大的优势,比如我可以自定义一个 ”ul_list_menu"的模板生成下面的菜单代码:

 

<ul class="topMenu">
   <li class="menuItem menuItemSelected"></li>
   <li class="menuItem"></li> 
   <li class="menuItem"></li>
</ul>

 

 

其他有用参考:

http://shareal.blog.163.com/blog/static/27659056201193063914196/

http://www.coderli.com/eclipse-javadoc-template



posted on 2014-08-10 00:14  分布式编程  阅读(184)  评论(0编辑  收藏  举报

导航