强大的 IDEA 代码生成器,学会用,真香!

开发 前端 新闻
Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。

 前言

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

[[347287]]

基本使用

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

  1. for ( int i = 0 ; i < ; i++) { 
  2.  

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

自定义 Template

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

简单用法

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

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

  1. ========== 
  2.  
  3. <out> 
  4.  
  5. ---------- 
  6.  
  7. System.out.println($END$) 
  8.  
  9. ========== 
  10.  
  11. <pfs> 
  12.  
  13. ---------- 
  14.  
  15. privatefinalstatic String $varName$ = "$var$" ;` 
  16.  
  17. ========== 
  18.  
  19. <privateField> 
  20.  
  21. ---------- 
  22.  
  23. /** 
  24.  
  25. * $COMMENT$ 
  26.  
  27. @Getter 
  28.  
  29. @Setter 
  30.  
  31. private $TYPE$ $NAME$; 
  32.  
  33. ========== 
  34.  
  35. <main> 
  36.  
  37. ---------- 
  38.  
  39. public static void main (String[] args) { 
  40.  
  41. $END$ 
  42.  
  43.  
  44. ========== 

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

高级用法

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

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

快速声明变量

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

  1. <osgiRef> 
  2.  
  3. ---------- 
  4.  
  5. /** 
  6.  
  7. * $END$ 
  8.  
  9. @OsgiReference 
  10.  
  11. @Setter 
  12.  
  13. private $TYPE$ $NAME$; 

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

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

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

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

快速声明 logger

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

  1. <logger> 
  2.  
  3. ---------- 
  4.  
  5. /** logger */ 
  6.  
  7. privatestaticfinal Logger LOGGER = LoggerFactory.getLogger($CLASS$.class); 

最强大的 groovyScript()

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

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

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

快速 bean 配置

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

  1. <bean> 
  2.  
  3. ---------- 
  4.  
  5. <bean id= "$id$" class = "$REF$" /> 

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

快速打印当前上下文信息

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

  1. <printContext> 
  2.  
  3. --------------- 
  4.  
  5. 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(https://github.com/x-hansong/CodeMaker),好好利用也能节省很多重复编写代码的时间。

 

 

责任编辑:张燕妮 来源: 搜云库技术团队
相关推荐

2023-05-17 16:02:00

CSS工具代码生成器

2015-08-25 15:54:17

程序员代码生成器

2021-07-23 11:24:54

Create Inc开源G代码生成器

2012-03-30 09:31:44

WEBCSS

2021-09-17 09:50:29

Elpscrk智能字典生成器安全工具

2023-01-06 07:52:52

代码生成器开发

2017-03-20 17:49:21

Java Web模板代码

2021-12-10 09:45:19

生成器配置代码

2021-10-29 11:25:41

代码编程语言Java

2009-07-03 09:29:24

KeelKit

2015-04-22 09:36:27

JAVA代码生成器

2022-05-19 14:57:30

CSS代码工具

2017-09-06 09:26:03

Python生成器协程

2010-03-26 13:03:23

Boost.Pytho

2011-08-16 10:17:12

XCode模版引擎XTemplate

2010-09-07 16:31:17

SQL语句insert

2011-12-23 13:42:05

JavaScript

2021-04-22 21:15:38

Generator函数生成器

2015-08-25 11:07:58

2017-07-01 16:02:39

分布式ID生成器
点赞
收藏

51CTO技术栈公众号