热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MyeclipseTemplates详解(一)——Java模板基础

目录Templates简介MyEclipse自带Templates详解新建Template自定义Template因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模

目录

  • Templates简介      
  • MyEclipse自带Templates详解
  • 新建Template
  • 自定义Template

  因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Myeclipse的模板功能其实很强大,好像自己只用过syso这一个,所以最近学习了一下,初次写博客,谢绝转载。

一、Templates简介

1.1 Templates基本介绍

  Myeclipse模板的查看编辑入口,Window->Preferences->Java->Editor->Templates

  技术分享

  点击后右侧会出现所有模板列表:

技术分享

  现对标红位置简单介绍:

  • Name: 模板名称,可以用来替换自定义代码,以下简称热字符串,即可以被替换的字符串。
  • Context:作用域,只用在指定作用域下才能用来替换自定义代码,本文章只讨论Java相关模板。
  • Auto Insert:自动插入,指当模板名称唯一不会引起歧义的情况下,按代码提示键(若无修改则为Alt+/),直接替换不需要选择,为了快捷起见,尽量模板名称要唯一,自动插入选择上,可以方便输入。
  • New:这是本文章重点要使用的地方,即如何新建一个模板。
  • Preview:这是模板的预览。
  • Use code formatter:模板可以看作是Java代码,格式化方便查看。

1.2 Template基本语法

  Java Template其实相对简单,因为模板语法和Java语法一致,相对较难的只是对${}代表的标识符不熟悉,下面介绍所有标识符代表的含义。 

  可以把标识符简单划分为属性标识符,操作标识符和查找标识符三种(个人分类,方便理解)。

1.2.1 属性标识符

  属性标识符表示该变量表示某一种固定属性,有的随热字符串位置的变化而变化,有以下几种。

属性标识符
${enclosing_method}
热字符串所在位置方法的方法名。
${enclosing_method_arguments}
热字符串所在位置方法的参数名,若有多个以逗号分割。
${enclosing_package}
热字符串所在位置的包名。
${enclosing_project}
热字符串所在位置的项目名。
${enclosing_type}
热字符串所在位置的类名。
${file}
热字符串所在的文件名
${return_type}
热字符串所在位置方法的返回类型
${primary_type_name}
热字符串所在的文件名不带后缀
${date}
当前日期,例:2016-7-10
${time}
当前时间,例:下午6:00:09
${dollar}
代表字符串 $
${user}
当前登录用户名 例:Administrator
${year} 当前年份 例:2014
${todo} Todo的字符串样式,默认TODO

   其中几个标识符代表含义如下图所示。

技术分享

  注:${enclosing_type}和${primary_type_name}的区别,如下图所示

技术分享

1.2.2 操作标识符

操作标识符
${import} 当该类没有被引用,则引用这个类,例:${:import(java.util.List, java.util.Collection)}
${importStatic} 当该类没有被静态引用,则静态引用这个类,${:importStatic(java.util.Collections.EMPTY_SET,  ‘java.lang.System.*‘)}  
${cursor} 光标位置:热字符串被替换成指定代码后,光标首次定位在第一个变量上,按Enter后光标即会定位在${cursor}处。
${line_selection} 表示选中的行,选中行后按Shift+Alt+Z 选择指定Template进行操作,Template表达式中的${line_selection}将被替换为当前选择的行。
${word_selection}  表示选中的带双引号的字符串,按提示键选择指定Template进行操作,Template表达式中的${word_selection}将被替换为当前选中的字符串。

1.2.3 查找标识符 

  查找标识符会查找指定范围或类型的变量。在这之前简单介绍一下查找标识符的通用用法。

  1. 使用变量:例如表达式${id:var}中id即为变量名(var代表距当前位置最近的可用变量),再次引用时即可使用${id}表示相同的内容,这样做还有一个好处,那就是修改第一处后面同步修改,且按Tab键时不再定位相同的变量。
  2. 指定查找的类型:例如表达式${id:var(int)},用来查找int类型的变量,可以同时指定多个类型以逗号分隔如${id:var(int,double),位置靠前的优先被匹配,若可以同时查找到多个变量,则使用提示会显示下拉列表供选择。
  3. 查找变量时,只会查找当前可以访问到的变量。
  4. 查找变量时,默认显示距离热字符串最近的一个匹配变量,若没有查找到指定的变量则显示大括号里面的内容,例如${var}查找不到,会显示var。
  5. 当不指定查找类型时,可以不用变量名称,若指定查找类型,则必须有变量名称若不指定类型则不能查找基本类型的变量
查找标识符
${var} 匹配所有变量名称,包括成员变量,局部变量和参数。
${field} 匹配成员变量名称
${localVar} 匹配局部变量名称或参数名称
${array} 匹配数组名称
${array_type} ${array}匹配到数组的类型
${array_element}  为匹配的数组起一个可用的变量名,需和${array}一同使用
${collection} 匹配一个集合(实现java.util.Collection接口的集合)
${iterable} 匹配一个可遍历的元素,数组或者实现Iterate的对象
${iterable_type}  ${iterable}匹配到对象的元素类型,若有泛型,则显示泛型类型
${iterable_element}  为${iterable}匹配到对象起一个可用的变量名
${index} 一个可用的索引下表变量,一般用在循环体中
${elemType} 获得一个数组或者实现Iterate对象的元素类型,例:${t:elemType(a)} elem = ${a:array}
${newType} 根据全路径名,获得类名,若没有引用则对其引用,例:${type:newType(java.util.Iterator)}
${newName} 取一个具有相同风格且可用的变量名,例:${index:newName(int)}  
${link} 指定提示的内容,例:${kind:link(EMPTY_SET, EMPTY_LIST,  ‘EMPTY_MAP.entrySet()‘)}
${exception_variable_name} 捕获异常的变量名
${argType}

解析指定元素(template变量)的第n个泛型类型,若引用的变量不存在或者没有参数则解析为Object,n代表第几个泛型变量类型

例:${type:argType(vector,0)} ${first:var(type)} = ${vector:var(java.util.Vector)}.get(0);匹配最近一个Vector取第0个对象

二、MyEclipse自带Templates详解

  或许MyEclipse自带的Templates不常用,但是通过分析这些Templates可以加深对标识符的理解,方便以后自己根据需求编写Templates。下面简单介绍几个Template模板。

2.1 arrayadd,增加一个元素到数组中

2.1.1 template模板

${array_type}[] ${result:newName(array)} = new ${array_type}[${array}.length + 1];
System.arraycopy(${array}, 0, ${result}, 0, ${array}.length);
${result}[${array}.length]= ${var};

 2.1.2 示例

技术分享

2.1.3 详解

  根据最近一个数组,创建同类型的另一个数组,数组名称具有相同风格,且长度比原数组多一位,然后将最近的一个变量赋值给最后一位。当前例子介绍了${array},${array_type},${result:newName(array)}的用法。

2.2 arraymerge 数组合并

2.2.1 template模板

${array_type}[] ${result:newName(array1)} = new ${array_type}[${array1:array}.length + ${array}.length];
System.arraycopy(${array1}, 0, ${result}, 0, ${array1}.length);
System.arraycopy(${array}, 0, ${result}, ${array1}.length, ${array}.length);

2.2.2 例子

技术分享

2.2.3 详解

  这个例子是合并两个数组。当要获得多个同类型的变量时,需要为每个变量起一个名字,例:${array},${array1:array},这样才能依次取得多个变量。

2.3 do

2.3.1 template模板

do {
    ${line_selection}${cursor}
} while (${condition:var(boolean)});

2.3.2 示例

技术分享

2.3.3 详解

  所有带${line_selection}的template,在选中一行或多行后,按快捷键Shift+Alt+Z将会被呼唤出来,选择相应的template即可,template中的${line_selection}即表示为选中的行。

  ${cursor},代表回车后光标出现的位置。

2.4 for

2.4.1 template模板

for (${iteratorType:newType(java.util.Iterator)} ${iterator} = ${collection}.iterator(); ${iterator}.hasNext(); ) {
    ${type:elemType(collection)} ${name:newName(type)} = (${type}) ${iterator}.next();
    ${cursor}
}

2.4.2 示例

技术分享

2.4.3 详解

  通过这个例子可以简单学习下${collection},${iteratorType:newType(java.util.Iterator)}的用法,其中比较重要的就是自定义变量,${iterator},非系统类的即为自定义变量,默认显示{}内的内容,可以进行修改,修改时,所有引用的地方同步修改。

2.5 main

2.5.1 template模板

public static void main(String[] args) {
    ${cursor}
}

2.5.2 示例

技术分享

2.5.3 详解

  这是另一种比较常用的做法,不使用任何template标识符,替换一段代码,当有重复代码时可以使用此做法。

2.6 static_final

2.6.1 template模板

${visibility:link(‘public ‘,‘protected ‘,‘‘,‘private ‘)}static final ${type:link(String,int)} ${NAME} = ${expr:link(‘""‘,0)};

2.6.2 示例

技术分享

2.6.3 详解

  这就是一个典型的${link}用法,给出限定的几个参数供方便用户选择

2.7 sysout

2.7.1 template模板

System.out.println(${word_selection}${});${cursor}

2.7.2 示例

技术分享

2.7.3 详解

  这个应该是最常用的template,一般用户输入syso即可完成操作,原因是syso已经唯一匹配该template的名称所以无需再进行选择,因此template名称的唯一性还是有助于代码的快速替换的。很少有用户按照标准操作使用sysout,一般用户的行为都是在输入syso得到System.out.println();后在括号里面放入当前代码上面一行的变量,因此下面将对这个template进行优化。

  ${}代表一个占位符,这样可以使Tab键定位到该位置用于输入。

三、新建Template

  MyEclipse内置的Template不能满足需求的时候可以自己按需求建立。  

技术分享

  • Name:temlate的名字,建议简单,易记,唯一
  • Context:作用域,Java-即Java全作用域,Java statements-即java方法内作用域,Java type members-即java方法外作用域
  • Automatically insert:建议勾选,当符合要求时,自动插入,无需选择。
  • Insert Variable:相当于帮助文档,里面有所有可用标识符的解释和例子。   
四、自定义Template

  在大家都掌握template的基础上,以下就只提供template模板和简单介绍,例子不再给出,以下只是抛砖引玉,希望可以根据自己的需求制定出属于自己的template。新建方式如下:

3.1  sysout 优化

3.1.1 Templates模板

System.out.println(${localVar});//${todo} need to delete
${cursor}

3.1.2 模板详解

  • 一般项目中输出使用日志进行输出,System.out.println()一般用于简单的查看变量,需要被删除,因此加上 //${todo} need to delete
  • 增加焦点定位${cursor},这样在输入完成后即可按回车直接到下一行,简化输入
  • 按常用习惯,默认输出最近一个变量,${localVar},因基本类型无法匹配(我没有找到匹配方法),所以可以编写sysi代表打印出最近的int,sysd打印出最近的double
  • 同样其他template也可以进行优化,例如for的第二个,所以学会语法后就可以根据自己习惯进行优化。

3.2 ArrayList

3.2.1 Templates模板 

${:import(java.util.List, java.util.ArrayList)}
List<${String}> ${listName:newName(java.util.List)} =new ArrayList<${String}>();
${cursor}

3.2.2 模板详解

  • 首先使用${:import(java.util.List, java.util.ArrayList)}判断是否引用,可以减少一次快捷键使用,默认泛型是String,若修改后面的<>也会同步修改。
  • 自动生成可用的变量名${listName:newName(java.util.List)},可以自己进行修改
  • 可以定义该template名为alist,这样简单的输入几个字符通过快捷方式即可完成ArrayList创建。

3.3 HashMap

3.3.1 Templates模板 

${:import(java.util.Map, java.util.HashMap)}
Map<${String},${Object}> ${mapName:newName(java.util.Map)} =new HashMap<${String},${Object}>();
${cursor}

3.3.2 模板详解

  默认键是String,自动引入Map和HashMap类,自动起名字

3.4 log

3.4.1 Templates模板 

${:import(org.apache.log4j.Logger)}
private static final Logger logger = Logger.getLogger(${enclosing_type}.class);

3.4.2 模板详解

  自动引包,当前类名自动写入

3.5 junit

3.5.1 Templates模板 

${:import(org.junit.Test)}
@Test
public void test${newName}(){
    try {
        ${cursor}
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3.5.2 模板详解

  这是一个简单生成junit测试方法的template。

Myeclipse Templates详解(一) —— Java模板基础


推荐阅读
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • VS2019 在创建 Windows 恢复点时出现卡顿问题及解决方法
    在使用 Visual Studio 2019 时,有时会在创建 Windows 恢复点时遇到卡顿问题。这可能是由于频繁的自动更新导致的,每次更新文件大小可能达到 1-2GB。尽管现代网络速度较快,但这些更新仍可能对系统性能产生影响。本文将探讨该问题的原因,并提供有效的解决方法,帮助用户提升开发效率。 ... [详细]
  • 为了提升单位内部沟通效率,我们开发了一套飞秋软件与OA系统的消息接口服务系统。该系统能够将OA系统中的审批、通知等信息自动同步至飞秋平台,确保员工在使用飞秋进行日常沟通的同时,也能及时获取OA系统的各类重要信息,从而实现无缝对接,提高工作效率。 ... [详细]
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 在 Mac 上查看隐藏文件和文件夹的详细指南。通过终端命令,您可以轻松地显示或隐藏这些文件。具体步骤如下:输入 `defaults write com.apple.finder AppleShowAllFiles -bool true` 以显示所有隐藏文件,或使用 `defaults write com.apple.finder AppleShowAllFiles -bool false` 以重新隐藏它们。此方法适用于各种版本的 macOS,帮助用户更好地管理和访问系统文件。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
author-avatar
手机用户2502873837
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有