前言

Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能。刚开始觉得它只是一个简单的Code Snippet,后来发现它支持变量函数配置,可以支持很复杂的代码生成。

下面我来介绍一下Live Templates的用法。

基本使用

IDEA 自带很多常用的动态模板,在 Java 代码中输入fori,回车就会出现

for (int i = 0; i < ; i++) {}

img

按Tab可以在各个空白处跳转,手动填值。

自定义 Template

官方自带模板毕竟不能满足我们个人编码风格的需要,Live Templates提供了变量函数的方式供我们自定义。

简单用法

新增自定义模板,首先需要填写触发单词(即 Abbreviation),描述是可选的,然后定义模板的上下文,点击define选择Java,这样在编辑 Java 的时候就会触发当前模板,定义完上下文之后,就可以填写模板了。

img

下面列举几个我常用的简单模板

==========
<out>
----------
System.out.println($END$)
==========
<pfs>
----------
private final static String $varName$  = "$var$";`
==========
<privateField>
----------
/*** $COMMENT$*/
@Getter
@Setter
private $TYPE$ $NAME$;
==========
<main>
----------
public static void main(String[] args) {$END$
}
==========

模板支持变量的定义,使用$$包围的字符表示一个变量。$END$是一个特殊的预定义变量,表示光标最后跳转的位置。每个变量的位置都可以跳转过去。

高级用法

如果你用过 vim 的Code Sinppet插件,你会发现模板里面是可以执行函数的,强大的 Live Templates当然也支持,而且 IDEA 能够感知代码的语义,例如说当前编辑的函数的参数。但这一点就能够让我们玩出花来。我们从易到难来研究模板函数的功能。

img

前面我们提到的变量可以绑定函数,配置方式如上图所示。

快速声明变量

声明变量是一个常用的操作,特别是需要声明变量需要加注解,注释的时候,这些代码写起来就很枯燥。下面是我定义的模板:

<osgiRef>
----------
/*** $END$*/
@OsgiReference
@Setter
private $TYPE$ $NAME$;

乍一看这个模板跟我上面定义的privateField差不多,唯一的不同在于我给这些变量绑定了函数。

  • clipboard():返回当前粘贴板的字符串

  • decapitalize():将输入的字符串首字母变为小写

下面我们演示一下,我们先拷贝当前类名,然后输入osgiRef

img

快速声明 logger

声明 logger 也是一个常用的操作,上面我们是利用了粘贴函数来快速声明变量,现在我们来利用另一个函数className(),顾名思义,它的作用就是返回当前类名。

<logger>
----------
/** logger */
private static final Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);

img

最强大的 groovyScript()

如果说上面用到的函数提供的能力有限,不够灵活,那么groovyScript()提供了一切你想要的能力,它支持执行 Groovy 脚本处理输入,然后输出处理后的字符串。

groovyScript("code", ...)|  code   |   一段Groovy代码或者Groovy脚本代码绝对路径    |
|  ...    |   可选入参,这些参数会绑定到`_1, _2, _3, ..._n`, 在 Groovy 代码中使用。|

下面我们来看一下它的实际应用。

快速 bean 配置

新增一个服务都要在 Spring 中注册一个 bean,一般这个配置无非就是将指明id和class,由于我们是在 xml 中配置,所以不能利用className()函数,但是我们可以利用clipboard()函数获取到类的全引用,在 IDEA 中我们直接右键类名,点击Copy Reference就行。然后执行 groovy 脚本获取类名。

<bean>
----------
<bean id="$id$" class="$REF$" />

id绑定decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())),首先取clipboard()的值得到类的全引用,然后执行 groovy 代码_1.tokenize('.')[-1](按.分割为字符串数组,然后取最后一个即可得到类名,然后用decapitalize()将首字母小写即可得到id。

img

快速打印当前上下文信息

打印错误日志的时候需要打印当前上下文信息的,例如说入参,有时候入参很多的时候,写起来很痛苦,好在有模板函数methodParameters(),返回当前函数参数的列表,当然这个列表我们不能直接使用,需要结合groovyScript对它进行转化。

<printContext>
---------------
LogUtil.$TYPE$(LOGGER, "$MSG$ " + $params$);

将params绑定到groovyScript("'\"' + _1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') + '\"'", methodParameters()),就能够自动将当前函数的参数格式化后输出。

img

总结

上面我们简单介绍了常用的模板函数,其实 IDEA 还有很多其它模板函数,具体参考Creating and Editing Template Variables。

https://www.jetbrains.com/help/idea/2016.3/creating-and-editing-template-variables.html

IDEA 是一个很强大的工具,善用工具能够极大的提高工作效率,将精力投入到关键的事情上,而不是将时间浪费在编写重复代码上面。一些更高级的用法还有待大家去发掘。最后推广一波我写的代码生成插件CodeMaker,好好利用也能节省很多重复编写代码的时间。

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

开发工具:IDEA 强大的 Live Templates!相关推荐

  1. android串口工具apk_【APK】一个强大的Android开发工具!

    排版|设计|配图©孤狼小航 Android开发助手是个强大的Android开发工具,能够用来反编译其他应用.查看其他应用布局和控件信息.屏幕取色(颜色取样器).查看Activity历史记录.查看应用M ...

  2. mac sqlite可视化工具_Navicat for SQLite 12 for mac(强大数据库管理及开发工具)

    Navicat for SQLite 12 Mac版是Mac平台上的一款专为SQLite设计的强大数据库管理及开发工具,Navicat for SQLite 12 Mac版可以用于版本2或3的SQLi ...

  3. html在线编程工具,6 个强大的 HTML5 应用在线开发工具

    HTML5 日渐成为 Web 开发的主流技术之一,目前,W3C 已经完成了 HTML5 的基本特性,HTML5 成为 W3C 官方标准指日可待. 目前互联网中已经出现了大量基于 HTML5 的应用,其 ...

  4. Unity3D ——强大的跨平台3D游戏开发工具教程

    http://unity3d.9ria.com/?p=22 众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已经 ...

  5. 强大的Java前台后台开发工具

    强大的Java前台后台开发工具 常用的文本编辑器:Sublime Text.Notepad++.EditPlus等 常用的IDE:WebStorm.Intellij IDEA.Eclipce等 我们这 ...

  6. 推荐一款轻量且功能强大的集成开发工具(IDE)lightly

    面对初学者推荐的一款轻量且功能强大的集成开发工具(IDE)lightly,可以在线使用,也可以下载客户端,支持windows和macOS. 支持C,C++,Golang,HTML,Java,PHP,P ...

  7. JetBrains WebStorm for Mac (强大的前端开发工具) 2021.3

    MacWebStorm for Mac 是一款优秀的前端编辑工具,前端开发必备.主要新增了ES2022 私有类成员支持.新远程开发功能.更出色的单仓库支持.Deno LSP.拆分 Run(运行)工具窗 ...

  8. 【使用PyCharm进行Python开发:如何通过右键Run运行程序】-PyCharm是一款强大的Python开发工具,提供了方便快捷的编写、测试和调试Pyth...

    [使用PyCharm进行Python开发:如何通过右键Run运行程序]-PyCharm是一款强大的Python开发工具,提供了方便快捷的编写.测试和调试Python代码的功能.在编写完Python代码 ...

  9. Delphi--最强大的开发工具(欢迎转载)

    最强大的开发工具 Delphi 目录 --------------------------------------------------------------------------- 前言 De ...

最新文章

  1. mysql 隐式失误_评“MySQL 隐式转换引起的执行结果错误”
  2. windows server 2008 如何取消禁ping
  3. 线程:Timer定时器
  4. C语言实验——最小公倍数和最大公约数_JAVA
  5. php实现鼠标悬停显示下拉菜单,Html中鼠标悬停显示二级菜单的两种方法
  6. 解决vmware移动虚拟机之后执行ifconfig命令无输出的问题
  7. JavaScript可否多线程? 深入理解JavaScript定时机制
  8. 如何解决Mybatis里mapper文件中关于不能用大于小于号
  9. Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.24.215] failed: connect timed ou
  10. QAbstractTableModel中的data()到底执行几遍???
  11. 洛谷.3121.审查(AC自动机 链表)
  12. 社交网络与社会计算课程内容梳理总结
  13. JDK 的下载与安装(非常详细!)
  14. Android N for Developers
  15. 2014年大数据解决方案提供商面临三大挑战
  16. Moblin v2开发环境设置——创建一个新应用程序
  17. SVN: can't open file‘\db\txn-current-lock’ 拒绝访问
  18. 查询数据库空间(mysql和oracle)
  19. 男生停止长高的迹象是真的吗?
  20. ORACLE公司的历史

热门文章

  1. ***清除工具的进化
  2. 关于管理的经典故事(员工激励)
  3. 有限元笔记04:二维实体单元
  4. java测试类生成对象,java编写student类 用Java编写一段测试程序,生成student类的两个对象,并输出每个对象基本信息?...
  5. python将一行作为字段_关于python:Django admin在同一行显示多个字段
  6. 计算机常见屏幕英语语句,计算机常见屏幕英语
  7. python 重定向 ctf_3.CTF——python利用工具
  8. JAVA语法——经典题目01
  9. github和gitlab仓库一起使用
  10. git的入门摸索和入门研究