LiveTemplates是什么,听上去感觉挺玄乎的。有的同学用过之后觉得简直太好用了,不能说大大提高了开发效率吧,至少也是小小的提高一下,节省了很多敲重复代码的时间。有的同学用过之后说:没什么用,奇技淫巧罢了。 就算你没听过这个概念,但是或多或少你可能都用到过一点,就算没有用过的话,也可能见到过一些,没吃过猪肉可能也见过猪跑,就像下面这样的操作。 总结一下呢,它就类似于一种快捷指令(神奇代码),只要你在IDEA中输入特定的字母组合,IDEA就会帮你在当前输入的位置插入一段预先定义好的代码,代码可以是固定的,也可以定义一些上下文变量,适用于那些常用的、使用频率较高的声明或重复代码段。 比如声明静态final的String,在不用LiveTmeplates的情况下,我们会手动在IDEA中依次敲出publicstaticfinalString这一行代码,当然可能借助IDEA的只能提示,每个单词只需要敲前两个字母。在使用了LiveTmeplates的情况下,我们只需要敲出psfs这四个字母,然后按回车键,IDEA就会帮我们在psfs这个位置插入publicstaticfinalString这一行。 没用过的同学是不是赶紧打开IDEA试一下呢?在设置界面,输入LiveTemplates,然后找到右侧的Java就可以看到内置的模板。不光有Java的,对于多种文件类型都有支持,比如SQL、JavaScript、JSP、Kotlin等。 下面介绍几个IDEA内置的、常用的模板。常用的LiveTemplates main和psvm main方法插入,虽然我们已经可以很熟练的盲打出下面这一段代码,但是只敲四个字母是不是会更快呢。publicstaticvoidmain(String〔〕args){}变量声明 下面一些是常用的变量声明 psfspublicstaticfinalString psfipublicstaticfinalint prsfprivatestaticfinal StString控制台输出 下面是控制台输出,还有一些,不一一列举了。 sout 文本输出,最常用到的。System。out。println(); souf 带格式化的文本输出。System。out。printf();循环迭代 fori 输入完,按回车后,光标会在i的位置,等待输入临界值。for(inti0;i;i){} iter 用forEach的方式循环,在一个数组或者列表变量下方使用。ListStringarraynewArrayList();for(Strings1:array){} itco 用迭代器的方式迭代,同样是在一个列表变量下方使用。ListStringarraynewArrayList();for(IteratorStringiteratorarray。iterator();iterator。hasNext();){Stringnextiterator。next();}SurroundTemplates 这种模板是在选中一段代码后,然后使用快捷键optioncommandj调出提示框,然后选择一个模板类型。 这个快捷键是MAC系统下的,如果你用的是windows,可以通过点击code菜单项,找到SorroundWith,看看快捷键是什么。 C 实现一个CallableCallableObjectcallablenewCallableObject(){publicObjectcall()throwsException{System。out。println(hello);}}; RL和WL 插入一段读锁或写锁加解锁代码。要先声明一个读写锁实例ReadWriteLockreadWriteLocknewReentrantReadWriteLock();readWriteLock。readLock()。lock();try{System。out。println(hello);}finally{readWriteLock。readLock()。unlock();}自定义Template 有时候我们经常会高频词的使用一段相似的代码,比如做网络开发的同学,会经常用到Socket相关的初始化代码。 对于这种我们自己经常要写的某些类似的代码段,就可以抽取出一个Template出来,方便我们使用。 下面我就实现一个自定的Template,来看一下是不是大大简化了重复性劳动。有的同学可能觉得无所谓的事儿,复制、粘贴也挺省事儿。见仁见智吧,觉得有用的可以尝试一下,觉得鸡肋的也无所谓,反正也不影响最后的功能实现。 比如我最新在做一些系统优化的工作,这个过程中,我会频繁的用commonslang3的StopWatch来看某些方法或者某些代码段的执行时间。比如下面的代码段:StopWatchstopWatchnewStopWatch(代码段);stopWatch。start();try{Thread。sleep(1000);}catch(InterruptedExceptione){thrownewRuntimeException(e);}stopWatch。stop();System。out。printf(执行时间sn,stopWatch。toString()); 由于我比较懒,所以我不想每次都敲重复的内容,连粘贴复制都不想。所以就想到了LiveTemplate。 1、打开IDEA的设置窗口,找到Editor下的LiveTemplates,在右侧找到Java,点击最右侧的加号。 2、输入这个Template的名字,到时候可以在编辑器中通过输入这个名字来插入这个模板。 输入描述,帮助我们记忆。 最后输入模板的内容。 我给这个模板起名为watch,模板内容如下:StopWatchstopWatchnewStopWatch(MESSAGE34;);stopWatch。start();SELECTIONstopWatch。stop();System。out。printf(执行时间sn,stopWatch。toString()); SELECTION表示选中的部分,我们要监控的正好是某个方法或者某个代码段,所以正好可以用SurroundTemplates,并且在内容中用了SELECTION,模板就默认为SurroundTemplates了。 MESSAGE就是一个占位符的作用,当我们插入这个模板后,光标会定位到这个占位符,我们就可以在需要定制的地方输入我们想要的内容了。在这里呢,由于我的一个方法中可能用到多个StopWatch,所以正好在这儿占位,给不同的StopWatch赋予不同的名字。 可以通过下面的演示看一下效果。 LiveTemplate支持的变量 有一些情况下,我们希望插入的内容不只是固定不变的代码段,而是希望加入一些上下文相关的内容,比如当前方法的入参,比如当前类名,比如当前方法名等。用下面这个例子说明一下。 有一个内置的模板叫做soutm,它的描述是这样的:PrintscurrentclassandmethodnamestoSystem。out,打印当前类和方法名,我们看一下效果,直接将当前类和方法名Study。main填充到了println参数位置上。 模板内容是这样的,其中用到了两个变量是表示当前类名的CLASSNAME和表示当前方法名的METHODNAME。System。out。println(CLASSNAME。METHODNAME34;); 更多的可用变量可以到IDEA官网查看,看到这些变量后,可能会打开你的思路,更近一步的为你提高开发效率。不过不用这些变量也没关系,上面这写其实差不多也够用了。 官网地址:https:www。jetbrains。comhelpideatemplatevariables。htmlpredefinedfunctions