开发工具:IDEA 强大的 Live Templates!
前言
Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能。刚开始觉得它只是一个简单的Code Snippet,后来发现它支持变量函数配置,可以支持很复杂的代码生成。
下面我来介绍一下Live Templates的用法。
基本使用
IDEA 自带很多常用的动态模板,在 Java 代码中输入fori,回车就会出现
for (int i = 0; i < ; i++) {}
按Tab可以在各个空白处跳转,手动填值。
自定义 Template
官方自带模板毕竟不能满足我们个人编码风格的需要,Live Templates提供了变量函数的方式供我们自定义。
简单用法
新增自定义模板,首先需要填写触发单词(即 Abbreviation),描述是可选的,然后定义模板的上下文,点击define选择Java,这样在编辑 Java 的时候就会触发当前模板,定义完上下文之后,就可以填写模板了。
下面列举几个我常用的简单模板
==========
<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 能够感知代码的语义,例如说当前编辑的函数的参数。但这一点就能够让我们玩出花来。我们从易到难来研究模板函数的功能。
前面我们提到的变量可以绑定函数,配置方式如上图所示。
快速声明变量
声明变量是一个常用的操作,特别是需要声明变量需要加注解,注释的时候,这些代码写起来就很枯燥。下面是我定义的模板:
<osgiRef>
----------
/*** $END$*/
@OsgiReference
@Setter
private $TYPE$ $NAME$;
乍一看这个模板跟我上面定义的privateField差不多,唯一的不同在于我给这些变量绑定了函数。
clipboard():返回当前粘贴板的字符串
decapitalize():将输入的字符串首字母变为小写
下面我们演示一下,我们先拷贝当前类名,然后输入osgiRef
快速声明 logger
声明 logger 也是一个常用的操作,上面我们是利用了粘贴函数来快速声明变量,现在我们来利用另一个函数className(),顾名思义,它的作用就是返回当前类名。
<logger>
----------
/** logger */
private static final Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);
最强大的 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。
快速打印当前上下文信息
打印错误日志的时候需要打印当前上下文信息的,例如说入参,有时候入参很多的时候,写起来很痛苦,好在有模板函数methodParameters(),返回当前函数参数的列表,当然这个列表我们不能直接使用,需要结合groovyScript对它进行转化。
<printContext>
---------------
LogUtil.$TYPE$(LOGGER, "$MSG$ " + $params$);
将params绑定到groovyScript("'\"' + _1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') + '\"'", methodParameters())
,就能够自动将当前函数的参数格式化后输出。
总结
上面我们简单介绍了常用的模板函数,其实 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!相关推荐
- android串口工具apk_【APK】一个强大的Android开发工具!
排版|设计|配图©孤狼小航 Android开发助手是个强大的Android开发工具,能够用来反编译其他应用.查看其他应用布局和控件信息.屏幕取色(颜色取样器).查看Activity历史记录.查看应用M ...
- mac sqlite可视化工具_Navicat for SQLite 12 for mac(强大数据库管理及开发工具)
Navicat for SQLite 12 Mac版是Mac平台上的一款专为SQLite设计的强大数据库管理及开发工具,Navicat for SQLite 12 Mac版可以用于版本2或3的SQLi ...
- html在线编程工具,6 个强大的 HTML5 应用在线开发工具
HTML5 日渐成为 Web 开发的主流技术之一,目前,W3C 已经完成了 HTML5 的基本特性,HTML5 成为 W3C 官方标准指日可待. 目前互联网中已经出现了大量基于 HTML5 的应用,其 ...
- Unity3D ——强大的跨平台3D游戏开发工具教程
http://unity3d.9ria.com/?p=22 众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已经 ...
- 强大的Java前台后台开发工具
强大的Java前台后台开发工具 常用的文本编辑器:Sublime Text.Notepad++.EditPlus等 常用的IDE:WebStorm.Intellij IDEA.Eclipce等 我们这 ...
- 推荐一款轻量且功能强大的集成开发工具(IDE)lightly
面对初学者推荐的一款轻量且功能强大的集成开发工具(IDE)lightly,可以在线使用,也可以下载客户端,支持windows和macOS. 支持C,C++,Golang,HTML,Java,PHP,P ...
- JetBrains WebStorm for Mac (强大的前端开发工具) 2021.3
MacWebStorm for Mac 是一款优秀的前端编辑工具,前端开发必备.主要新增了ES2022 私有类成员支持.新远程开发功能.更出色的单仓库支持.Deno LSP.拆分 Run(运行)工具窗 ...
- 【使用PyCharm进行Python开发:如何通过右键Run运行程序】-PyCharm是一款强大的Python开发工具,提供了方便快捷的编写、测试和调试Pyth...
[使用PyCharm进行Python开发:如何通过右键Run运行程序]-PyCharm是一款强大的Python开发工具,提供了方便快捷的编写.测试和调试Python代码的功能.在编写完Python代码 ...
- Delphi--最强大的开发工具(欢迎转载)
最强大的开发工具 Delphi 目录 --------------------------------------------------------------------------- 前言 De ...
最新文章
- mysql 隐式失误_评“MySQL 隐式转换引起的执行结果错误”
- windows server 2008 如何取消禁ping
- 线程:Timer定时器
- C语言实验——最小公倍数和最大公约数_JAVA
- php实现鼠标悬停显示下拉菜单,Html中鼠标悬停显示二级菜单的两种方法
- 解决vmware移动虚拟机之后执行ifconfig命令无输出的问题
- JavaScript可否多线程? 深入理解JavaScript定时机制
- 如何解决Mybatis里mapper文件中关于不能用大于小于号
- Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.24.215] failed: connect timed ou
- QAbstractTableModel中的data()到底执行几遍???
- 洛谷.3121.审查(AC自动机 链表)
- 社交网络与社会计算课程内容梳理总结
- JDK 的下载与安装(非常详细!)
- Android N for Developers
- 2014年大数据解决方案提供商面临三大挑战
- Moblin v2开发环境设置——创建一个新应用程序
- SVN: can't open file‘\db\txn-current-lock’ 拒绝访问
- 查询数据库空间(mysql和oracle)
- 男生停止长高的迹象是真的吗?
- ORACLE公司的历史
热门文章
- ***清除工具的进化
- 关于管理的经典故事(员工激励)
- 有限元笔记04:二维实体单元
- java测试类生成对象,java编写student类 用Java编写一段测试程序,生成student类的两个对象,并输出每个对象基本信息?...
- python将一行作为字段_关于python:Django admin在同一行显示多个字段
- 计算机常见屏幕英语语句,计算机常见屏幕英语
- python 重定向 ctf_3.CTF——python利用工具
- JAVA语法——经典题目01
- github和gitlab仓库一起使用
- git的入门摸索和入门研究