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以查看现有的模板。要编辑一个现有的模板,单击列表中的这个模板并单击 EditEdit 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 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 将选中的行插入到这里。这对用模板包装行是很有用的。 以选中行作为主体的 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 来共享这些模板。

每次写一个小的测试类时都要输入下面这个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

详解 Eclipse 中的快速 Java 编码(代码模板)的更多相关文章

  1. java editor template Eclipse中的快速Java\JavaScript代码模板使用

    java editor template Eclipse中的快速Java\JavaScript代码模板使用 学习了:http://technicalsearch.iteye.com/blog/2150 ...

  2. javap反编译命令详解&Eclipse中配置javap命令

    javap命令所有参数如下图所示: javap 命令用于解析类文件.其输出取决于所用的选项.若没有使用选项,javap 将输出传递给它的类的 public 域及方法.javap 将其输出到标准输出设备 ...

  3. java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")

    http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...

  4. 详解javaweb中jstl如何循环List中的Map数据_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List<Map& ...

  5. 详解 SWT 中的 Browser.setUrl(String url, String postData, String[] headers) 的用法

    http://hi.baidu.com/matrix286/item/b9e88b28b90707c9ddf69a6e ———————————————————————————————————————— ...

  6. 转:详解Eclipse断点

    详解Eclipse断点(原) 详解Eclipse断点 大家肯定都用过Eclipse的调试的功能,在调试的过程中自然也无法避免要使用断点(breakpoint),但不知是否对Eclipse中各类断点都有 ...

  7. 详解Objective-C中委托和协议

    Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托. AD: ...

  8. 详解Android中的四大组件之一:Activity详解

    activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...

  9. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

  10. (转载)详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

随机推荐

  1. Android RecyclerView 获取当前滚动到的Item项

    背景:RecyclerView  左右滑动时,需要获取当前显示在页面上的选项卡 步骤: 1. RecyclerView  添加addOnScrollListener,回调中可以直接获取对应Item I ...

  2. win10自动更新导致的任务栏假死,右键单击任务栏延迟菜单延迟出现

    系统是win10企业版,前天晚上回家之前,电脑还是好好的,然后前天早上跑过来以后,发现电脑自动重启了,我还以为是办公室停电了之类的(现在想了一下愚蠢,停电不会自动开机),没想到是自动更新 然后我发现, ...

  3. DOM – Browser Reflow & Repaint

    前言 没有深入研究过, 懂个概念就好, 等性能遇到问题在来看看. 以前写的笔记: 游览器 reflow 参考: reflow和repaint引发的性能问题 精读<web reflow> R ...

  4. html4,5 basic

    更新: 2021-06-15 游览器 href 和 base href 绝对路径和相对路径 在没有 base href 的情况下 href="/about.html" 就是从 do ...

  5. C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  6. 均值回归策略在A股ETF市场获利的可能性

    如何在股票市场获利 曾经有人告诉我一个在股票市场赚钱的秘诀,只要掌握这个秘诀,赚钱就像捡钱一样容易.他说:这个秘诀其实很简单,就是在股票价格低的时候买入,在价格高的时候卖出. 啧啧,不愧是秘诀,明明是 ...

  7. window使用VNC远程ubuntu16.04

    首先保证在同一局域网下 一.设置Ubuntu 16.04 允许进行远程控制 首先在ubuntu下找到下图图标 将[允许其他人查看您的桌面]这一项勾上,然后在安全那项,勾选[要求远程用户输入此密码],并 ...

  8. .NET 白板书写预测-曲线拟合

    白板软件书写速度是其最核心的功能,注册StylusPlugin从触摸线程拿触摸点数据并在另一UI线程绘制渲染是比较稳妥的方案,具体的可以查看小伙伴德熙的2019-1-28-WPF-高性能笔 - lin ...

  9. axios 常见状态码

    '100': 'Continue', '101': 'SwitchingProtocols', '102': 'Processing', '103': 'EarlyHints', '200': 'Ok ...

  10. C# 新语法 switch 的简单写法

    // C# 中的新语法 switch 的简写 string str = "123"; string res = str switch { "1" => & ...