用了這麼久 IDEA,你竟然不知道 Live Templates ?

風的姿態發表於2023-01-10

大家好,我是風箏,公眾號「古時的風箏」,專注於 Java技術 及周邊生態。
文章會收錄在 JavaNewBee 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裡面。

Live Templates 是什麼,聽上去感覺挺玄乎的。有的同學用過之後覺得簡直太好用了,不能說大大提高了開發效率吧,至少也是小小的提高一下,節省了很多敲重複程式碼的時間。有的同學用過之後說:沒什麼用,奇技淫巧罷了。

就算你沒聽過這個概念,但是或多或少你可能都用到過一點,就算沒有用過的話,也可能見到過一些,沒吃過豬肉可能也見過豬跑,就像下面這樣的操作。

總結一下呢,它就類似於一種快捷指令(神奇程式碼),只要你在 IDEA 中輸入特定的字母組合,IDEA 就會幫你在當前輸入的位置插入一段預先定義好的程式碼,程式碼可以是固定的,也可以定義一些上下文變數,適用於那些常用的、使用頻率較高的宣告或重複程式碼段。

比如宣告靜態 finalString,在不用 Live Tmeplates 的情況下,我們會手動在 IDEA 中依次敲出 "public static final String" 這一行程式碼,當然可能借助 IDEA 的只能提示,每個單詞只需要敲前兩個字母。在使用了 Live Tmeplates 的情況下, 我們只需要敲出 psfs這四個字母,然後按Enter鍵,IDEA 就會幫我們在 psfs這個位置插入 "public static final String" 這一行。

沒用過的同學是不是趕緊開啟 IDEA 試一下呢?在設定介面,輸入 Live Templates,然後找到右側的 Java就可以看到內建的模板。不光有 Java 的,對於多種檔案型別都有支援,比如 SQL 、JavaScript、JSP 、Kotlin 等。

下面介紹幾個 IDEA 內建的、常用的模板。

常用的 Live Templates

main 和 psvm

main 方法插入,雖然我們已經可以很熟練的盲打出下面這一段程式碼,但是隻敲四個字母是不是會更快呢。

public static void main(String[] args){
}

變數宣告

下面一些是常用的變數宣告

psfs

public static final String 

psfi

public static final int 

prsf

private static final 

St

String 

控制檯輸出

下面是控制檯輸出,還有一些,不一一列舉了。

sout

文字輸出,最常用到的。

System.out.println();

souf

帶格式化的文字輸出。

System.out.printf();

迴圈迭代

fori

輸入完,按回車後,游標會在 i<的位置,等待輸入臨界值。

    for (int i = 0; i < ; i++) {

    }

iter

用 forEach 的方式迴圈,在一個陣列或者列表變數下方使用。

List<String> array = new ArrayList<>();
for (String s1 : array) {

}

itco

用迭代器的方式迭代,同樣是在一個列表變數下方使用。

List<String> array = new ArrayList<>();
for (Iterator<String> iterator = array.iterator(); iterator.hasNext(); ) {
  String next =  iterator.next();
}

Surround Templates

這種模板是在選中一段程式碼後,然後使用快捷鍵 option+command+j調出提示框,然後選擇一個模板型別。

這個快捷鍵是 MAC 系統下的,如果你用的是 windows,可以透過點選 code選單項,找到 Sorround With,看看快捷鍵是什麼。

C

實現一個 Callable

Callable<Object> callable = new Callable<Object>() {
  public Object call() throws Exception {
    System.out.println("hello");
  }
};

RL 和 WL

插入一段讀鎖或寫鎖加解鎖程式碼。

// 要先宣告一個讀寫鎖例項
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readWriteLock.readLock().lock();
try {
  System.out.println("hello");
} finally {
  readWriteLock.readLock().unlock();
}

自定義 Template

有時候我們經常會高頻詞的使用一段相似的程式碼, 比如做網路開發的同學,會經常用到 Socket 相關的初始化程式碼。

對於這種我們自己經常要寫的某些類似的程式碼段,就可以抽取出一個 Template 出來,方便我們使用。

下面我就實現一個自定的 Template,來看一下是不是大大簡化了重複性勞動。有的同學可能覺得無所謂的事兒,複製、貼上也挺省事兒。見仁見智吧,覺得有用的可以嘗試一下,覺得雞肋的也無所謂,反正也不影響最後的功能實現。

比如我最新在做一些系統最佳化的工作,這個過程中,我會頻繁的用 commons-lang3StopWatch來看某些方法或者某些程式碼段的執行時間。比如下面的程式碼段:

StopWatch stopWatch = new StopWatch("程式碼段");
stopWatch.start();
try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  throw new RuntimeException(e);
}
stopWatch.stop();
System.out.printf("執行時間 %s%n",stopWatch.toString());

由於我比較懶,所以我不想每次都敲重複的內容,連貼上複製都不想。所以就想到了 Live Template。

1、開啟 IDEA 的設定視窗,找到 Editor 下的 Live Templates,在右側找到 Java,點選最右側的加號。

image-20230103224026372

2、輸入這個 Template 的名字,到時候可以在編輯器中透過輸入這個名字來插入這個模板。

輸入描述,幫助我們記憶。

最後輸入模板的內容。

image-20230103224347657

我給這個模板起名為 watch,模板內容如下:

StopWatch stopWatch = new StopWatch("$MESSAGE$");
stopWatch.start();
$SELECTION$
stopWatch.stop();
System.out.printf("執行時間 %s%n",stopWatch.toString());

$SELECTION$表示選中的部分,我們要監控的正好是某個方法或者某個程式碼段,所以正好可以用 Surround Templates,並且在內容中用了 $SELECTION$,模板就預設為 Surround Templates了。

$MESSAGE$就是一個佔位符的作用,當我們插入這個模板後,游標會定位到這個佔位符,我們就可以在需要定製的地方輸入我們想要的內容了。在這裡呢,由於我的一個方法中可能用到多個 StopWatch,所以正好在這兒佔位,給不同的 StopWatch 賦予不同的名字。

可以透過下面的演示看一下效果。

Live Template 支援的變數

有一些情況下,我們希望插入的內容不只是固定不變的程式碼段,而是希望加入一些上下文相關的內容,比如當前方法的入參,比如當前類名,比如當前方法名等。用下面這個例子說明一下。

有一個內建的模板叫做 soutm,它的描述是這樣的:Prints current class and method names to System.out,列印當前類和方法名,我們看一下效果,直接將當前類和方法名 Study.main填充到了println引數位置上。

模板內容是這樣的,其中用到了兩個變數是表示當前類名的 $CLASS_NAME$和表示當前方法名的$METHOD_NAME$

System.out.println("$CLASS_NAME$.$METHOD_NAME$");

更多的可用變數可以到 IDEA 官網檢視,看到這些變數後,可能會開啟你的思路,更近一步的為你提高開發效率。不過不用這些變數也沒關係,上面這寫其實差不多也夠用了。

官網地址:https://www.jetbrains.com/help/idea/template-variables.html#predefined_functions


如果覺得還不錯的話,給個推薦吧!

公眾號「古時的風箏」,Java 開發者,專注 Java 及周邊生態。堅持原創乾貨輸出,你可選擇現在就關注我,或者看看歷史文章再關注也不遲。長按二維碼關注,跟我一起變優秀!

相關文章