IDEA擁有優(yōu)秀的代碼補(bǔ)全功能。除此之外,還擁有動(dòng)態(tài)模板(Live Templete)和后綴補(bǔ)全(Postfix Completion)功能,讓編碼更簡(jiǎn)單。
本篇文檔以Java為例,帶你領(lǐng)略后綴補(bǔ)全和動(dòng)態(tài)模板的魅力。
后綴補(bǔ)全和動(dòng)態(tài)模板
IDEA在2021年1月的版本上線了自定義后綴補(bǔ)全的功能,在此之前,只能使用預(yù)定義好的補(bǔ)全模板。不過(guò)現(xiàn)在功能還不甚完善,一些小細(xì)節(jié)沒(méi)處理好,但是比起自定義動(dòng)態(tài)模板,后綴補(bǔ)全更符合操作邏輯,也更方便。
動(dòng)態(tài)模板
動(dòng)態(tài)模板即輸入一段縮寫(xiě),然后按下enter后會(huì)自動(dòng)根據(jù)前后文生成對(duì)應(yīng)的代碼,主要用于方法、類、表達(dá)語(yǔ)句內(nèi)。動(dòng)態(tài)模板中的變量會(huì)根據(jù)定義,自動(dòng)獲取上下文中的類名、方法名等,從而自動(dòng)生成代碼。

例如,寫(xiě)下sout即可生成System.out.println();。甚至可以通過(guò)配置動(dòng)態(tài)模板自動(dòng)生成Swagger注釋:https://blog.csdn.net/weixin_40596063/article/details/90897864
優(yōu)點(diǎn)
- 適合快速生成大段代碼。
- 適合用在起始語(yǔ)句中,如if、for、main等。
缺點(diǎn)
- 不適合先寫(xiě)變量,之后再補(bǔ)全的情況。這種情況就十分適合后綴補(bǔ)全。
后綴補(bǔ)全
后綴補(bǔ)全是指在輸入變量或代碼串后,通過(guò).等方式,按下tab/space/enter來(lái)快速生成代碼的方式。例如我們非常常見(jiàn)的"字符串".sout就會(huì)生成代碼System.out.println("字符串");。

自定義后綴補(bǔ)全
通過(guò)自定義,我們也可以擁有自己的后綴模板。
以下以“輸入toMap后補(bǔ)全代碼為.stream().collect(Collections.toMap());”為例,設(shè)置一個(gè)自定義的后綴補(bǔ)全。該例子能夠讓一個(gè)列表類型的變量轉(zhuǎn)換為一個(gè)Map。
第一步
打開(kāi)后綴補(bǔ)全設(shè)置(Editor | General | Postfix Completion),點(diǎn)擊加號(hào)新增一個(gè)Java后綴補(bǔ)全:

第二步
在key處設(shè)置后綴,支持語(yǔ)言最低版本具體選擇。因?yàn)楸纠蠸tream接口是Java 8才支持,故我們選擇8版本。之后點(diǎn)擊加號(hào),設(shè)置要以哪種類型的變量作為后綴匹配的匹配變量。從上到下依次是:
- void
- 非void
- 布爾類型
- 數(shù)字類型
- 非基本類型(即除了基本類型包裝類外的對(duì)象)
- 數(shù)組(不包括List、Set)
- 在項(xiàng)目中選取類
- 輸入類名(需要輸入全類名)

因?yàn)槭橇斜眍愋偷淖兞坎攀褂迷摵缶Y,故這里我們填寫(xiě)java.util.Collection。

第三步
最后是輸入展開(kāi)后的表達(dá)式。使用$EXPR$來(lái)表示匹配的變量,使用$END$來(lái)表示光標(biāo)結(jié)尾。
- 具體還有什么預(yù)定義變量,參見(jiàn)動(dòng)態(tài)模板的文檔:https://www.jetbrains.com/help/idea/template-variables.html#pdtv

此處輸入
$EXPR$.stream().collect(java.util.Collections.toMap($END$));
注意,這里使用的類名要使用全類名,否則之后還需要手動(dòng)import類。
完成
保存設(shè)置后,便可以使用該后綴補(bǔ)全功能:
