当前位置: 首页 > 后端技术 > Java

Java8开发的4大技巧你不得不知道

时间:2023-04-01 18:07:23 Java

java训练开发过程中往往需要编写固定格式的代码,比如声明私有变量、logger或者bean等,对于这种小规模的代码生成,我们可以使用IDEA提供的LiveTemplates功能。一开始我以为它只是一个简单的CodeSnippet,后来发现它支持变量函数配置,可以支持非常复杂的代码生成。下面介绍一下LiveTemplates的用法。基本上使用IDEA自带的很多常用的动态模板,在Java代码中输入fori,回车会出现for(inti=0;i<;i++){}按Tab跳转各个空格,手动填入值.自定义模板官方内置的模板毕竟不能满足我们个人编码风格的需要。LiveTemplates提供了可变函数的方法供我们自定义。简单用法添加自定义模板,首先需要填写触发词(即Abbreviation),描述可选,然后定义模板的上下文,点击define选择Java,这样当当前模板就会被触发编辑Java,并定义上下文之后,就该填写模板了。下面是几个我常用的简单模板==========System.out.println($END$)privatefinalstaticString$varName$="$var$";`/**$COMMENT$*/@Getter@Setterprivate$TYPE$$NAME$;

publicstaticvoidmain(String[]args){$END$}模板支持定义变量,包围由$$字符代表一个变量。$END$是一个特殊的预定义变量,表示光标最后跳转的位置。每个变量的位置都可以跳转到。进阶使用如果你用过vim的CodeSinppet插件,你会发现功能可以在模板中执行,当然强大的LiveTemplates也支持,IDEA可以感知代码的语义,比如当前编辑函数的参数。但这就是让我们玩得开心的原因。我们从易到难探索模板函数的功能。前面我们提到的变量可以绑定到函数上,配置方法如上图所示。变量的快速声明声明变量是一个常见的操作,尤其是当你需要声明变量并且需要添加注解的时候。注释的时候,这些代码写起来很枯燥。下面是我定义的模板:/**$END$*/@OsgiReference@Setterprivate$TYPE$$NAME$;乍一看,这个模板和我上面定义的privateField很相似,唯一不同的是我给这些变量函数绑定了。clipboard():返回当前剪贴板的字符串decapitalize():将输入字符串的首字母改为小写下面来演示一下,我们先复制当前类名,然后输入osgiRef快速声明logger声明logger也是一个常用的操作,上面我们使用了粘贴函数来快速声明变量,现在我们使用另一个函数className(),顾名思义,它的作用是返回当前类名。/*logger/privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger($CLASS$.class);最强大的groovyScript()如果上面使用的函数功能有限,不够灵活,那么groovyScript()提供了你想要的所有功能,它支持执行Groovy脚本来处理输入,然后输出处理后的字符串。groovyScript(“代码”,...)|代码|一段Groovy代码或Groovy脚本代码的绝对路径||...|可选参数,这些参数将绑定到_1,_2,_3,..._n,在Groovy代码中使用。|我们来看看它的实际应用。快速bean配置要添加新服务,您必须在Spring中注册一个bean。一般这种配置无非就是指定id和class。由于我们是在xml中配置,所以不能使用className()函数,但是可以使用clipboard()函数获取类的全引用。在IDEA中,我们直接右击类名,点击CopyReference。然后执行groovy脚本获取类名。idbindingdecapitalize(groovyScript("_1.tokenize('.')[-1]",clipboard())),先取clipboard()的值得到类的全引用,然后执行Groovycode_1.tokenize('.')[-1](用.分割成字符串数组,然后取最后一个得到类名,再用decapitalize()将首字母小写得到theid.quickprint打印错误日志时需要打印当前的上下文信息,比如输入参数,有时候输入参数很多的时候,写起来很痛苦,幸好有一个模板函数methodParameters()返回当前函数参数列表,当然我们不能直接使用这个列表,需要结合groovyScript进行转换LogUtil.$TYPE$(LOGGER,"$MSG$"+$params$);将参数绑定到groovyScript("'\"'+_1.collect{it+'=[\"+'+it+'+\"]'}.join(',')+'\"'",methodParameters()),当前函数的参数格式化后可以自动输出。