提高開(kāi)發(fā)效率Live?Templates使用技巧詳解
引言
Live Templates 是什么,聽(tīng)上去感覺(jué)挺玄乎的。有的同學(xué)用過(guò)之后覺(jué)得簡(jiǎn)直太好用了,不能說(shuō)大大提高了開(kāi)發(fā)效率吧,至少也是小小的提高一下,節(jié)省了很多敲重復(fù)代碼的時(shí)間。有的同學(xué)用過(guò)之后說(shuō):沒(méi)什么用,奇技巧罷了。
就算你沒(méi)聽(tīng)過(guò)這個(gè)概念,但是或多或少你可能都用到過(guò)一點(diǎn),就算沒(méi)有用過(guò)的話(huà),也可能見(jiàn)到過(guò)一些,沒(méi)吃過(guò)豬肉可能也見(jiàn)過(guò)豬跑,就像下面這樣的操作。
總結(jié)一下呢,它就類(lèi)似于一種快捷指令(神奇代碼),只要你在 IDEA 中輸入特定的字母組合,IDEA 就會(huì)幫你在當(dāng)前輸入的位置插入一段預(yù)先定義好的代碼,代碼可以是固定的,也可以定義一些上下文變量,適用于那些常用的、使用頻率較高的聲明或重復(fù)代碼段。
比如聲明靜態(tài) final
的 String
,在不用 Live Tmeplates 的情況下,我們會(huì)手動(dòng)在 IDEA 中依次敲出 "public static final String" 這一行代碼,當(dāng)然可能借助 IDEA 的只能提示,每個(gè)單詞只需要敲前兩個(gè)字母。在使用了 Live Tmeplates 的情況下, 我們只需要敲出 psfs
這四個(gè)字母,然后按回車(chē)鍵,IDEA 就會(huì)幫我們?cè)?psfs
這個(gè)位置插入 "public static final String" 這一行。
沒(méi)用過(guò)的同學(xué)是不是趕緊打開(kāi) IDEA 試一下呢?在設(shè)置界面,輸入 Live Templates
,然后找到右側(cè)的 Java
就可以看到內(nèi)置的模板。不光有 Java 的,對(duì)于多種文件類(lèi)型都有支持,比如 SQL 、JavaScript、JSP 、Kotlin 等。
下面介紹幾個(gè) IDEA 內(nèi)置的、常用的模板。
常用的 Live Templates
main 和 psvm
main 方法插入,雖然我們已經(jīng)可以很熟練的盲打出下面這一段代碼,但是只敲四個(gè)字母是不是會(huì)更快呢。
public static void main(String[] args){ }
變量聲明
下面一些是常用的變量聲明
psfs
public static final String
psfi
public static final int
prsf
private static final
St
String
控制臺(tái)輸出
下面是控制臺(tái)輸出,還有一些,不一一列舉了。
sout
文本輸出,最常用到的。
System.out.println();
souf
帶格式化的文本輸出。
System.out.printf();
循環(huán)迭代
fori
輸入完,按回車(chē)后,光標(biāo)會(huì)在 i<
的位置,等待輸入臨界值。
for (int i = 0; i < ; i++) { }
iter
用 forEach 的方式循環(huán),在一個(gè)數(shù)組或者列表變量下方使用。
List<String> array = new ArrayList<>(); for (String s1 : array) { }
itco
用迭代器的方式迭代,同樣是在一個(gè)列表變量下方使用。
List<String> array = new ArrayList<>(); for (Iterator<String> iterator = array.iterator(); iterator.hasNext(); ) { String next = iterator.next(); }
Surround Templates
這種模板是在選中一段代碼后,然后使用快捷鍵 option
+command
+j
調(diào)出提示框,然后選擇一個(gè)模板類(lèi)型。
這個(gè)快捷鍵是 MAC 系統(tǒng)下的,如果你用的是 windows,可以通過(guò)點(diǎn)擊 code
菜單項(xiàng),找到 Sorround With
,看看快捷鍵是什么。
C
實(shí)現(xiàn)一個(gè) Callable
Callable<Object> callable = new Callable<Object>() { public Object call() throws Exception { System.out.println("hello"); } };
RL 和 WL
插入一段讀鎖或?qū)戞i加解鎖代碼。
// 要先聲明一個(gè)讀寫(xiě)鎖實(shí)例 ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); readWriteLock.readLock().lock(); try { System.out.println("hello"); } finally { readWriteLock.readLock().unlock(); }
自定義 Template
有時(shí)候我們經(jīng)常會(huì)高頻詞的使用一段相似的代碼, 比如做網(wǎng)絡(luò)開(kāi)發(fā)的同學(xué),會(huì)經(jīng)常用到 Socket 相關(guān)的初始化代碼。
對(duì)于這種我們自己經(jīng)常要寫(xiě)的某些類(lèi)似的代碼段,就可以抽取出一個(gè) Template 出來(lái),方便我們使用。
下面我就實(shí)現(xiàn)一個(gè)自定的 Template,來(lái)看一下是不是大大簡(jiǎn)化了重復(fù)性勞動(dòng)。有的同學(xué)可能覺(jué)得無(wú)所謂的事兒,復(fù)制、粘貼也挺省事兒。見(jiàn)仁見(jiàn)智吧,覺(jué)得有用的可以嘗試一下,覺(jué)得雞肋的也無(wú)所謂,反正也不影響最后的功能實(shí)現(xiàn)。
比如我最新在做一些系統(tǒng)優(yōu)化的工作,這個(gè)過(guò)程中,我會(huì)頻繁的用 commons-lang3
的 StopWatch
來(lái)看某些方法或者某些代碼段的執(zhí)行時(shí)間。比如下面的代碼段:
StopWatch stopWatch = new StopWatch("代碼段"); stopWatch.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } stopWatch.stop(); System.out.printf("執(zhí)行時(shí)間 %s%n",stopWatch.toString());
由于我比較懶,所以我不想每次都敲重復(fù)的內(nèi)容,連粘貼復(fù)制都不想。所以就想到了 Live Template。
1、打開(kāi) IDEA 的設(shè)置窗口,找到 Editor 下的 Live Templates
,在右側(cè)找到 Java
,點(diǎn)擊最右側(cè)的加號(hào)。
2、輸入這個(gè) Template 的名字,到時(shí)候可以在編輯器中通過(guò)輸入這個(gè)名字來(lái)插入這個(gè)模板。
輸入描述,幫助我們記憶。
最后輸入模板的內(nèi)容。
我給這個(gè)模板起名為 watch
,模板內(nèi)容如下:
StopWatch stopWatch = new StopWatch("$MESSAGE$"); stopWatch.start(); $SELECTION$ stopWatch.stop(); System.out.printf("執(zhí)行時(shí)間 %s%n",stopWatch.toString());
$SELECTION$
表示選中的部分,我們要監(jiān)控的正好是某個(gè)方法或者某個(gè)代碼段,所以正好可以用 Surround Templates,并且在內(nèi)容中用了 $SELECTION$
,模板就默認(rèn)為 Surround Templates了。
$MESSAGE$
就是一個(gè)占位符的作用,當(dāng)我們插入這個(gè)模板后,光標(biāo)會(huì)定位到這個(gè)占位符,我們就可以在需要定制的地方輸入我們想要的內(nèi)容了。在這里呢,由于我的一個(gè)方法中可能用到多個(gè) StopWatch,所以正好在這兒占位,給不同的 StopWatch 賦予不同的名字。
可以通過(guò)下面的演示看一下效果。
Live Template 支持的變量
有一些情況下,我們希望插入的內(nèi)容不只是固定不變的代碼段,而是希望加入一些上下文相關(guān)的內(nèi)容,比如當(dāng)前方法的入?yún)?,比如?dāng)前類(lèi)名,比如當(dāng)前方法名等。用下面這個(gè)例子說(shuō)明一下。
有一個(gè)內(nèi)置的模板叫做 soutm
,它的描述是這樣的:Prints current class and method names to System.out,打印當(dāng)前類(lèi)和方法名,我們看一下效果,直接將當(dāng)前類(lèi)和方法名 Study.main
填充到了println
參數(shù)位置上。
模板內(nèi)容是這樣的,其中用到了兩個(gè)變量是表示當(dāng)前類(lèi)名的 $CLASS_NAME$
和表示當(dāng)前方法名的$METHOD_NAME$
。
System.out.println("$CLASS_NAME$.$METHOD_NAME$");
更多的可用變量可以到 IDEA 官網(wǎng)查看,看到這些變量后,可能會(huì)打開(kāi)你的思路,更近一步的為你提高開(kāi)發(fā)效率。不過(guò)不用這些變量也沒(méi)關(guān)系,上面這寫(xiě)其實(shí)差不多也夠用了。
官網(wǎng)地址:www.jetbrains.com/help/idea/t…
以上就是提高開(kāi)發(fā)效率Live Templates使用技巧詳解的詳細(xì)內(nèi)容,更多關(guān)于提高開(kāi)發(fā)效率Live Templates的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot集成Redis向量數(shù)據(jù)庫(kù)實(shí)現(xiàn)相似性搜索功能
Redis?是一個(gè)開(kāi)源(BSD?許可)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),用作數(shù)據(jù)庫(kù)、緩存、消息代理和流式處理引擎,向量檢索的核心原理是通過(guò)將文本或數(shù)據(jù)表示為高維向量,并在查詢(xún)時(shí)根據(jù)向量的相似度進(jìn)行搜索,本文給大家介紹了SpringBoot集成Redis向量數(shù)據(jù)庫(kù)實(shí)現(xiàn)相似性搜索功能2024-09-09Java類(lèi)變量和成員變量初始化過(guò)程的應(yīng)用介紹
昨天看了一本叫做《突破程序員基本功的16課》的書(shū),個(gè)人感覺(jué)還可以,主要對(duì)Java的技巧進(jìn)行了一些深入的講解,讓我對(duì)類(lèi)的初始化和對(duì)象的創(chuàng)建有了新的認(rèn)識(shí)2013-04-04Springboot安全框架整合SpringSecurity實(shí)現(xiàn)方式
這篇文章主要介紹了Spring全家桶中Springboot安全框架整合SpringSecurity的實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望可以有所幫助2021-09-09spring?data?jpa如何使用自定義repository實(shí)現(xiàn)類(lèi)
這篇文章主要介紹了spring?data?jpa如何使用自定義repository實(shí)現(xiàn)類(lèi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java+opencv3.2.0實(shí)現(xiàn)hough圓檢測(cè)功能
這篇文章主要為大家詳細(xì)介紹了Java+opencv3.2.0實(shí)現(xiàn)hough圓檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02探討Java中函數(shù)是值傳遞還是引用傳遞問(wèn)題
這篇文章主要介紹了探討Java中函數(shù)是值傳遞還是引用傳遞問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟
全文搜索(Full-Text?Search)是指對(duì)大規(guī)模存儲(chǔ)在計(jì)算機(jī)系統(tǒng)中的文本數(shù)據(jù)進(jìn)行檢索和匹配的技術(shù),它允許用戶(hù)輸入關(guān)鍵字,然后從海量的文本數(shù)據(jù)中快速找到相關(guān)的信息,本文介紹了SpringBoot整合Lucene實(shí)現(xiàn)全文檢索的詳細(xì)步驟,需要的朋友可以參考下2024-03-03