欢迎关注方志朋的博客,回复”666“获面试宝典

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,好好利用也能节省很多重复编写代码的时间。

作者 | Sharehub

链接 | blog.xiaohansong.com/idea-live-templates.html

热门内容:干掉SQL中的like,我用es后运营小姐姐们都说好快!假如 IDEA 也加入防沉迷功能...当 Docker 遇到 Intellij IDEA,再次解放了生产力~你真的会写for循环吗?来看看这些常见的for循环优化方式最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

Java 8 开发的 4 大技巧相关推荐

  1. Java 8 开发的 4 大顶级技巧,你都知道吗 ?

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:https://dzone.com/articles/ ...

  2. Java 8 开发的 4 大顶级技巧

    来源:codeceo.com/article/java-8-top-tips.html 我使用Java 8编码已经有些年头,既用于新的应用程序,也用来迁移现有的应用,感觉是时候写一些我发现的非常有用的 ...

  3. Java 8开发的4大顶级技巧

    我使用Java 8编码已经有些年头,既用于新的应用程序,也用来迁移现有的应用,感觉是时候写一些我发现的非常有用的"最佳实践".我个人并不喜欢"最佳实践"这个说法 ...

  4. java kiwi_[转] Java 8 开发的 4 大顶级技巧

    我使用 Java 8 编码已经有些年头,既用于新的应用程序,也用来迁移现有的应用,感觉是时候写一些我发现的非常有用的 "最佳实践".我个人并不喜欢"最佳实践" ...

  5. 成为优秀Java程序员的10大技巧

    来自:http://geek.csdn.net/news/detail/114500 Java程序员有许多应遵循的守则或最佳实践方式.本文概述了每个开发者最应该遵循的10条守则或戒律,如果不遵循它们, ...

  6. Java 编程开发的30个技巧

    (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母. 例如: ThisIsAClassName thisI ...

  7. Java后端开发面试7大核心总结,为你保驾护航金九银十!

    前言 本篇分享的面试题内容包括:Java基础面试题.Spring面试点.MySQL数据库.JVM核心知识点.Spring Cloud面试题.Redis相关.Java多线程与并发系列等. 一.Java基 ...

  8. 新手必学的java报表开发工具FineReport实用技巧

    1.在制作模板时,如何将报表中的值传递到超链接网页呢? 在项目中以frame方法把F1.CPT放到项目的页面中,对F1.CPT做网络报表超链接F2.CPT,然后在F2.cpt页面中,做个超链接的网页, ...

  9. Java后端开发工程师是否该转大数据开发?

    背景 看到一些java开发工程师,对java后端薪酬太悲观了.认为换去大数据领域就会高工资.觉得java后端没有前途.我从事java后端开发,对大数据领域工作有些了解,但不深入.本文描述一下我对jav ...

最新文章

  1. android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色
  2. function在php中,function
  3. 动态规划系列---求数组中两个元素差的最大值
  4. java多线程学习-java.util.concurrent详解
  5. windows下cmd中清屏
  6. H.264算法的优化策略
  7. 素数和 c语言慕课,第五周 素数和问题
  8. 主板插槽接口相关释义
  9. python实现堆排序用类的方法_三分钟玩转堆排序原理及面试题(多图解释 + Python 实现)...
  10. PySide使用QVariant
  11. 2017会考计算机知识点,高中物理会考知识点考点归纳2017
  12. Ubuntu16.04+VMware15.0.4系统瘦身
  13. 关于STM32F105 软硬件环境搭建
  14. (素材源码)猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
  15. 学习 MySQL 必备的几个示例数据库
  16. 手机版 Ubuntu
  17. 串行通信 现场总线(网络)
  18. 搜狗收录域名之搜狗自带蜘蛛
  19. 【JY】ETABS弹塑性时程分析的性能校核
  20. 尚硅谷vue前端项目心得2

热门文章

  1. inshot怎么转gif_Figma插件开发-生成Gif
  2. 暑期集训3:几何基础 练习题G: HDU - 1052
  3. Linux系统下给Qt应用程序配置图标(其余的应用程序也是可以实现添加图标的)
  4. 浏览器会缓存js文件
  5. 【多线程】ConcurrentLinkedQueue 的实现原理
  6. $.ajax居然触发popstate事件?
  7. C# Sato CL4NX打印机发送SBPL指令打印表面信息、RFID芯片数据写入
  8. 定制简单的Linux系统
  9. 推荐5款实用的jQuery时间轴插件
  10. 【转】触屏手机电话拨打链接