IntelliJ IDEA有哪些「不為人知」的強(qiáng)大功能?
開(kāi)源項(xiàng)目、工具資源、技術(shù)文章等方面,每周五首發(fā)于 ,歡迎大家Star并收藏!
收集整理每周優(yōu)質(zhì)開(kāi)發(fā)者內(nèi)容,包括
還在把IntelliJ IDEA當(dāng)成文本編輯器一樣使用?那就虧大了!
今天就來(lái)給大家介紹一下非常好用的IntelliJ IDEA技巧--后綴補(bǔ)全。
后綴補(bǔ)全是一個(gè)非常強(qiáng)大的功能,它可以讓你使用后綴補(bǔ)全來(lái)生成一個(gè)現(xiàn)有的表達(dá)式。
這大大減少手動(dòng)輸入、光標(biāo)移動(dòng)等時(shí)間,從而提高了工作效率。
后綴補(bǔ)全
每當(dāng)你有一個(gè)現(xiàn)有的表達(dá)式時(shí),你可以在一個(gè)點(diǎn)后面附加一個(gè)特定的后綴,并使用Tab鍵來(lái)應(yīng)用它。IntelliJ IDEA接收表達(dá)式,并根據(jù)提供的后綴對(duì)其進(jìn)行轉(zhuǎn)換。
如果通過(guò)后綴補(bǔ)全,你只需要輸入items.for,IDEA就會(huì)自動(dòng)識(shí)別for這個(gè)后綴自動(dòng)創(chuàng)建一個(gè)for-each表達(dá)式,如下圖所示:

是不是很有意思?接下來(lái)再試試try這個(gè)后綴后綴:

它會(huì)快速生成一個(gè)try-catch表達(dá)式,是不是很高效?
除了這兩個(gè)之外,還有很多后綴補(bǔ)全模板:
fori
:通過(guò)索引進(jìn)行列表迭代forr
:用索引按相反的順序進(jìn)行迭代switch
:生成switch表達(dá)式sout
:使用System.out.println打印表達(dá)式null
:檢查表達(dá)式是否為空notnull
:檢查表達(dá)式是否為非空
通過(guò)一個(gè)簡(jiǎn)單的后綴,就可以補(bǔ)全一串表達(dá)式,效率也得到了很大的提升。
該功能最初在ReSharper中可用,然后作為IDEA的一個(gè)單獨(dú)插件,后來(lái)在13.1版本中作為核心功能被引入IDEA。
顯示可用模板
不同類(lèi)型的變量、表達(dá)式有不同的后綴補(bǔ)全,而且這些后綴模板也沒(méi)必要死記硬背。
IDEA為我們提供了一個(gè)非常方便的快捷鍵,可以顯示可用的模板:
Windows:
Ctrl+J
macOS:
? + J
通過(guò)快捷鍵,它會(huì)打開(kāi)一個(gè)彈出窗口,只顯示與給定類(lèi)型相關(guān)的后綴模板。也就是說(shuō),如果你在一個(gè)列表后面觸發(fā)快捷鍵,它只會(huì)顯示一個(gè)和列表相關(guān)的后綴模板。

配置
如果你覺(jué)得默認(rèn)的后綴補(bǔ)全不匹配你的使用習(xí)慣,你可以進(jìn)行個(gè)性化配置。
你可以在Preferences→Editor → General → Postfix Completion
設(shè)置中,瀏覽可用的后綴模板,你可以禁用個(gè)別模板或整個(gè)功能。
自定義模板
雖然IDEA提供了相當(dāng)多的內(nèi)置模板,但是,開(kāi)發(fā)者眾多,個(gè)性化需求自然也很多,所以,內(nèi)置模板不一定能夠滿足每個(gè)用戶的需求,這時(shí)候就會(huì)想到,能不能自定義模板呢?
很不幸,它不允許定義自己的模板。
不過(guò),有一個(gè)IDE插件可以解決這個(gè)問(wèn)題,它的名字叫Custom Postfix Templates
。
該插件帶有各種各樣的附加模板,你可以使用或編輯這些模板來(lái)更好地滿足你的需要,在語(yǔ)言方面,它還支持Java, Scala, SQL, PHP, Kotlin, Python, Dart, JavaScript, Ruby, Rust, Go和Groovy。
而且,更重要的是,你實(shí)際上可以添加自定義模板。
這款插件目前支持通過(guò)Java語(yǔ)言自定義模板,后續(xù)會(huì)支持更多語(yǔ)言當(dāng)然。
不會(huì)Java的也不用擔(dān)心,Custom Postfix Templates真正好的地方在于,模板語(yǔ)法真的很容易讀和寫(xiě)。
下面來(lái)看看一個(gè)具體的例子:
.toInt : convert to int
? ?java.lang.String → Integer.parseInt($expr$)
? ?java.lang.Number → $expr$.intValue()
? ?NUMBER → ((int) ($expr$))
解釋一下這段自定義模板的代碼。
第一行由后綴模板以及描述組成,它觸發(fā)了模板.toInt,在冒號(hào)后有一個(gè)文本描述。
然后是若干行代碼,這些行定義了在不同的輸入類(lèi)型下應(yīng)該產(chǎn)生什么樣的結(jié)果,而后綴則適用于不同的輸入類(lèi)型。
換句話說(shuō),當(dāng)給定的變量類(lèi)型不同時(shí),同一個(gè)后綴模板可以給出不同的結(jié)果。
在上面的例子中,你可以看到,使用.toInt后綴將字符串轉(zhuǎn)換為整數(shù),處理方式是Integer.parseInt($expr$)。
然而,將相同的前綴應(yīng)用于數(shù)字時(shí),處理方式就變成了(int) ($expr$)。
該插件在Editor→Custom Postfix Templates的設(shè)置中增加了一個(gè)新的模塊,在這里你可以看到所有模板的列表,也可以編輯它。

很多功能剛開(kāi)始接觸時(shí)都會(huì)覺(jué)得麻煩,但是一旦習(xí)慣了之后就會(huì)真正體會(huì)到它帶來(lái)的效率提升,后綴補(bǔ)全就是這樣的一項(xiàng)功能,我們可以用一個(gè)簡(jiǎn)單的后綴轉(zhuǎn)換成幾行甚至幾十行代碼,它的便利性可想而知。感興趣的同學(xué)趕緊用起來(lái)吧!
建議大家有空可以多瀏覽Github,有很多好用的開(kāi)源免費(fèi)工具。但是,目前Github上項(xiàng)目多如牛毛,而且刷榜現(xiàn)在也非常嚴(yán)重,想要找到優(yōu)質(zhì)的項(xiàng)目變得越來(lái)越難。這里,給大家推薦Github上一個(gè)非常不錯(cuò)的項(xiàng)目《DevWeekly》,這個(gè)項(xiàng)目每周都會(huì)精挑細(xì)選一些優(yōu)質(zhì)的開(kāi)源項(xiàng)目,涵蓋C++、JAVA、JavaScript、Python、Go等不同編程語(yǔ)言。此外,還有一些開(kāi)源工具、優(yōu)秀的技術(shù)文章,喜歡的同學(xué)可以Star并收藏一下,每周五會(huì)定期更新:
https://github.com/Jackpopc/DevWeekly