0. 背景
作為一個 Java 程式員,我相信,絕大多數同學日常都是用 idea 來寫代碼,
Idea 作為宇宙第一 Java IDE,提供了豐富、強大的功能,可以讓你寫 Java 代碼快得飛起來,
遺憾的是,很多人都不知道怎么開啟 idea 隱藏的強大功能,下面博主將帶你一起,探究 idea 背后那些強大到逆天的功能,
特別說明:
本文所有實操基于 Mac OSX 系統,其他作業系統(如 Windows,Linux 等)沒有實踐過,不做講解,
非特別說明:
雖然文章標題有點『標題黨』的嫌疑,但是內容絕對不是標題黨文章,干貨滿滿,請耐心往下看,看完沒識訓直接來北京打我!
1. ToC(目錄)
本文將從以下幾個方面,展開講解:
- keymap
- 常用插件
- 高效配置
- 超好用的快捷鍵
- 神器:Postfix
- 終極神器:Live Template
2. keymap
keymap,就是 idea 的快捷鍵配置方案,本身沒有太多的內容,之所以放到最前面,是因為后續的講解,很大程度上都依賴于 keymap,
建議將 keymap 設定為默認的,比如 Mac 下默認的 keymap 就是 Mac OS X 10.5 +,
這樣當你想使用某個快捷鍵而 Google 時,多數時候,找到的答案都使用的是默認的快捷鍵方案,不然的話,別人的快捷鍵你不一定適用,
3. 常用插件
接下來為大家推薦一些常用的插件,有了這些插件的加持,會讓你的作業事半功倍,
為了方便大家索引,先把推薦的插件列到下面:
- Lombok
- Key Promoter X
- Alibaba Java Coding Guide
- CamelCase
- GenerateAllSetter
- Codota AI Autocomplete
- GsonFormat
- Grep Console
- MavenHelper
- RestfulToolKit
- RainbowBrackets
- Mybatis Plugin
下面將逐一介紹這些常用的插件,
3.1 Lombok
插件官網:https://plugins.jetbrains.com/plugin/6317-lombok
這個插件,相信不用多做解釋,寫過 Java 的同學都知道,JavaBean 代碼里有一堆的 set/get,tostring 等方法,非常臃腫,有了 Lombok 之后,再也不用寫這些臃腫的代碼了,
3.2 Key Promoter X
插件官網:https://plugins.jetbrains.com/plugin/9792-key-promoter-x
這個插件的作用是告訴你,你做的某個操作,有哪些快捷鍵可以代替,
有些時候,我們想要做某件事情,比如我想打開 idea 自帶的 terminal,但是我并不知道有快捷鍵可以用,于是我只能傻乎乎的用滑鼠去點開 terminal,
有了這個插件后,當你用滑鼠去點 terminal 時,右下角會有個彈窗提示,告訴你,其實你沒必要用滑鼠去點,直接使用快捷鍵 Alt + F12 就可以了,如下圖:

怎么樣,是不是很貼心!
3.3 Alibaba Java Coding Guide
插件官網:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines
這個插件,也不做過多解釋,阿里巴巴官方推出了 Java 開發手冊,這個插件就是檢查你的代碼是否符合手冊規范的,直接安裝吧,相信阿里巴巴!
舉個簡單的例子,當我要獲取當前時間戳的時候,我這么寫:long time1 = new Date().getTime(),這個時候,它就會有報錯提示,告訴你直接使用 long time2 = System.currentTimeMillis():

怎么樣,是不是很智能,又學到了一招吧!
3.4 CamelCase
插件官網:https://plugins.jetbrains.com/plugin/7160-camelcase
這個插件的作用是對字串做格式上的轉化: kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case 等,
典型的應用場景是,比如我們資料庫里面的欄位,用的是下劃線的格式,但是 Java 里面的欄位,用的是駝峰的格式,
我們怎么保證不會因為手殘導致資料庫欄位和 Java 欄位對不上呢?比如資料庫欄位是 your_name,一不小心 Java 里寫成了 youName,
當你遇到問題的時候,估計查到哭都查不出來,Java 里面的欄位少了個 'r',
這種情況下,CamelCase 插件就派上用場了,使用快捷鍵 Alt + Shift + u,就可以在各種格式之間切換了,很容易就可以把 your_name 變成 yourName,
如下所示:

當然,鑒于多數情況下,Java 不存在 kebab-case/space case 即 中劃線/空格 連接方式,你還可以在配置中設定,格式切換時去掉他們,這樣切換時,按 Alt + Shift + u 的次數就可以少些,配置方法如下:

3.5 GenerateAllSetter
插件官網:https://plugins.jetbrains.com/plugin/9360-generateallsetter
這絕對是一個特別值得推薦的插件,能夠 save your life !
在我們寫代碼的時候,經常會有各種 dto 之間的轉化,比如從資料庫的 User 轉化為前端的 UserVO,
如果是你自己寫,先不說寫一堆 get/set 累不累,最關鍵的是,我怕寫漏了某個欄位!比如 User 有 10 個欄位,最后到 UserVO 只有 9 個了,哭都沒地方哭!
總不能一個個數吧?這時候 GenerateAllSetter 就出來拯救你了!他可以自動的幫你生成 UserVO 所有的 set 方法,更智能的是,如果 UserVO 和 User 欄位名一樣,它還會自動幫你生成 get!如下圖所示:

當我需要將 User 轉化為 UserVO 時,在我寫好方法宣告后,按下 Alt + Enter,選中 Generate setter getter converter,他就自動幫我寫好轉化的代碼了!
怎么樣,是不是 6 得飛起,媽媽再也不用擔心我寫漏欄位了!
題外話:
可能有些人會有疑問,不就是個 DTO 轉化嗎?我用 BeanUtils 等工具不香嗎?還真是不香,這玩意有很多坑,性能是一方面,關鍵是當欄位名不一樣時,很難察覺到
3.6 Codota AI Autocomplete
插件官網:https://plugins.jetbrains.com/plugin/7638-codota-ai-autocomplete-for-java-and-javascript
關于 AI 插件,目前我就推薦這一個,確實比較強大(好多 AI 插件,名曰人工智能,其實人工智障,還卡得要死),貼一個 gif 大家感受下:

當你想初始化一個 List
當然上面舉的例子只是 Codota 很小的一個智能提示,其他更多留給大家探索,
總之,很多時候,它的智能提示很強大,能省去你不少時間,省得你一個個敲代碼了!
3.7 GsonFormat
插件官網:https://plugins.jetbrains.com/plugin/7654-gsonformat
這個插件的作用,就是根據 json 字串,自動生成 Java bean,先放個官網的 gif 吧:

這里使用的快捷鍵是:Alt + s,
這里需要注意的一點是,gsonformat 插件支持自定義 json 反序列化庫,比如 jackson,gson 等,可以在 setting 里面設定,如下圖:

3.8 Grep Console
插件官網:https://plugins.jetbrains.com/plugin/7125-grep-console
這個插件的作用是對 idea 默認的 Console(控制臺)做增強,比如默認的控制臺輸出的日志,不管日志級別是什么,都是沒有顏色區分的,
有了這個插件后,ERROR、WARN 等不同級別的日志,會展示成不同的顏色,方便我們一眼就看出來有沒有錯誤日志等,
默認的配色方案如下:

具體的顏色配置以及更多的功能,可以參考插件官網,
3.9 Maven Helper
插件官網:https://plugins.jetbrains.com/plugin/7179-maven-helper
平時我們的 maven 專案,會遇到一些依賴沖突的問題,比較難以排查和定位,有了這個插件后,能夠方便的顯示出來有哪些依賴沖突,而且還可以自動加上 exclude,操作界面如下圖:

3.10 RestfulToolKit
插件官網:https://plugins.jetbrains.com/plugin/10292-restfultoolkit
這個插件的作用是,幫助我們快速導航到指定 url 請求路徑的 controller 方法,平時我們的專案會寫大量的 controller 以及方法,來處理不同的 url 請求,
但是當代碼多了以后,很難找到某個 url 是哪個方法處理的,有了這個插件,就可以快速根據 url 導航到具體的方法,

快捷鍵是 cmd + \,
3.11 Rainbow Brackets
插件官網:https://plugins.jetbrains.com/plugin/10080-rainbow-brackets
這是一款提升 idea 顏值的插件,我們寫的代碼,經常會有很多嵌套的括號,比如 get1(get2(get3())),這么多的括號嵌套,而且顏色都還一樣,會看得人眼花繚亂,有了這個插件,會給每一對括號都顯示上不同的顏色,增加顏值的同時,也較方便的看出哪些括號是一對:

好了,到這里,推薦的常用插件就介紹完了,大家可以根據需要,自由安裝哪些插件,記住:插件雖好,可不要貪杯哦!
如果你也有好用的插件推薦,歡迎聯系我,一起探討學習!
4. 高效配置
Idea 確實是一款非常非常優秀的 Java IDE,所謂好馬還得好鞍配,下面介紹的一些高校配置,可以讓你使用 idea 的時候,更舒適、更高效!
4.1 import 自動匯入包和洗掉無用的 import
設定路徑:Editor -> General -> Auto Import,
勾選其中的 add on the fly 和 optimize on the fly,如下圖:

4.2 避免 import *
默認情況下,當 import 同一個包的 class 超過 5 個后,idea 會替換成 import *,但是通常我們不建議這樣寫,遵循的原則就是使用哪些就明確寫參考哪些!
設定路徑:Editor -> Code Style -> Java -> Imports,
將 Class count to use import with 、Names count to use static import with * 都設定為 999(默認都是 5),如下圖:

4.3 保存檔案時自動去掉末尾空格
設定路徑:Editor -> General -> Other,
Strip trailing space on Save 選 All,如下圖:

4.4 智能提示不區分大小寫
設定路徑:Editor -> General -> code completion,
取消勾選 match case,如下圖:

5. 超好用的快捷鍵
這一章節,將推薦一些超好用的快捷鍵,有了這些快捷鍵的加持,不僅能夠節省你大量的時間,還能讓你寫出更優秀的代碼!
5.1 萬能提示神器:Alt + Enter
如果你只想記住一個快捷鍵的話,我推薦這個!Alt + Enter 是一個萬能提示器,可以用說是好用到爆炸??!
只要 idea 有標紅、標黃或標灰的地方,你按下 Alt + Enter,基本上都能夠自動修復,
舉個簡單的例子,我的這個方法有多余的引數s2,idea 有置灰提示:

它告訴我s2 沒有用到,那么我怎么安全洗掉這個s2 呢(直接洗掉的話,呼叫的地方會報錯)?這時候,你只需選中s2,然后按下 Alt + Enter,就會發現有提示:
Safe delete s2,然后就可以安全的洗掉 s2了,包括呼叫的地方,下面是動圖:

結合前面的 GenerateAllSetter 插件,當我們 new 一個物件后,如果想生成這個物件所有的 setter 方法,也可以用 Alt + Enter:
選中變數名,按下 Alt + Enter,選擇 Generate all setter 即可,如下圖:

上面演示的只是 Alt + Enter 強大功能的冰山一角,更多特性留給大家探索,建議大家有事沒事多按按 Alt + Enter ,說不定會有意外識訓,
5.2 Tab 自動補全
這個功能就是用 idea 提示的候選項,替換你當前編輯的內容,
這么說可能有點抽象,我們來舉個例子,假設我有下面的代碼:
private static String get1(String s1) {
return return s1.toLowerCase().trim();;
}
我現在想把 toLowerCase 換成 toUpperCase,這時候我的游標在 s1 后面,如果我們直接敲 .touper... 然后回車,你回發現,toLowerCase并沒有被替換,而是被移動到了 toUpperCase() 后面,然后你還得手動去洗掉 toLowerCase(),如下動圖:

但是,如果你敲完 .touper 后,不是回車而是按 Tab,那么 idea 就會用 toUpperCase() 直接替換 toLowerCase():

這次,沒有多余的 toLowerCase() 了,不用手動去洗掉了!
5.3 自動生成代碼:Cmd + N
按下Cmd + N 后,有提示可以自動生成代碼,如getter/setter/toString 等,
5.4 智能結束當前陳述句:Cmd + Shift + Enter
按下 Cmd + Shift + Enter 后,可以智能結束當前陳述句,比如自動給行尾加上分號,自動給 if 加上括號等,可以自己多嘗試下,
5.5 檔案導航快捷鍵
- Cmd + O:打開類
- 雙擊Shift:打開任意檔案
- Cmd + E:最近打開檔案串列
- Auto scroll from/to source:左側檔案串列與右側Tab聯動
6. 神器:Postfix
Postfix 可謂是 idea 隱藏的一大神技!Postfix 簡單易用,但是功能強大,關鍵是一點也不復雜,相信學會了 postfix 后,你會后悔怎么沒有早點 get 到這項技能,好了,廢話不多說,我們直接開始,
我們來舉個例子,假設現在需要寫一個 for 回圈,依次列印 [0, 100) 這個 100 個數,那么代碼如下:
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
代碼本身是比較簡單的,關鍵是上面的 for 回圈代碼是怎么寫出來的,我們有兩種方式:挨個敲出來 和 用 postfix,
我們用動圖來分別展示下這兩種方式:
-
挨個敲出來

-
用 postfix

怎么樣?用postfix,寫 for 回圈是不是很快!(中間用到 sout 縮寫是后面 LiveTemplate 要講的),使用方法也很簡單,只需要在寫完 100 后按下 ".",idea 就自動出現提示了!
Postfix,正如其名,就是在后面按下 ".",然后出現相應的提示,這些提示是 idea 默認自帶的,不需要任何配置,開箱即用!
遺憾的是,idea 的 postfix 支持的功能是固定的,不能自定義,我們可以在 Editor -> General -> Postfix Comletion 中查看全部的 postfix 功能,如下圖:

再來幾個動圖演示下:
- 快速寫 if (obj == null) 和 if (obj != null) :

這里使用的是 .null 和 .nn postfix,
- 呼叫方法并快速宣告、賦值給變數

可以看到,我們不需要先寫變數宣告,然后被方法呼叫賦值,可以使用 .var 直接一步到位,
關于其他的 postfix,留給大家探索!
7 終極神器:Live Template
上一章講的 postfix,可以說是很強大了,可以提升不少寫代碼的速度,但是還是有點遺憾:postfix 畢竟數量有限,而且不是所有情況下都能使用,
那么接下來要講的 LiveTemplate 就可以說是終極大殺招了,可以極大提升寫代碼的速度!
備注:
很多同學可能會簡單的以為 LiveTemplate 不就是個代碼模板嗎?類似于其他代碼編輯器里面的 Code Snippet ?如果你以為只有這點功能,那你真是小看了 Live Template,
下面將由淺入深講解 Live Template,
7.1 添加 Live Template
我們經常在 Java 里面寫 main 方法,也經常用 System.out.println() 等來輸出,
你會發現,每次寫這些很麻煩,有一大堆代碼要敲,那么有沒有簡單快捷的方式呢?答案就是 LiveTemplate,
idea 自帶的 main、sout 關鍵字,就可以幫你實作上面的功能,我們通過一個動圖來展示下:

如果你也想通過一些關鍵字,來生成一段代碼,那么你可以添加自定義 Live Template,比如我們寫單元測驗時,需要寫一個 test 方法,如下:
@Test
public void test() {
}
我不想每次都寫這么一大堆,我想輸入 pvt 時,他能自動生成這個方法,下面我就演示下如何添加 Live Template 來實作這個功能,
步驟如下:
- 在 Editor -> Live Templates 頁面,點擊右上角的 +,選擇 2. Template Group,創建一個組,如下圖:

輸入你想要取的組名,比我我這里叫 demo,
- 選中你剛才創建的 demo 組,再次點擊右上角的 +,選擇 1. Live Template,創建一個 Live Template,

點完后,會出現如下頁面,需要你配置下:

一共有 5 個關鍵點,我都標出來了:
- 1 觸發關鍵字,這里寫 pvt,也就是說當你寫下 pvt 的時候,就會有相應提示;
- 2 描述,這里寫上你這個 pvt 的描述,方便提示的時候知道這個縮寫是干什么的;
- 3 這里就是要自動生成的代碼,我們這里寫上 junit test 的模板代碼;注意
$END$是說生成代碼后,游標會落到這里; - 4 推薦生成代碼后,自動格式化下;
- 5 這里比較關鍵,需要你配置下這個縮寫的生效范圍,因為 idea 不止可以寫 java,還可以寫 kotlin, groovy, js 等,我們一般勾選 Java 即可,如下圖:

然后,你就可以使用 pvt 這個縮寫來生成代碼了,如下圖:

7.2 Live Template 進階使用:變數和 groovy 腳本
上面說過,Live Template 不僅僅是用縮寫去生成代碼,Live Template 還支持定義變數、撰寫 groovy 腳本等方式,來增強功能,這個才是 Live Template 大殺器,
我們直接來看下演示,假設我有如下代碼:
public void printLogDemo(String s1, int i2, boolean b3) {
}
我現在想把所有的引數都打下日志,變成下面這樣:
public void printLogDemo(String s1, int i2, boolean b3) {
log.info("printLogDemo: s1={}, i2={}, b3={}", s1, i2, b3);
}
那我是要一個個去敲這些 s1={}, i2={}, b3={} 嗎?如果引數很多呢?是不是很費勁,有了 Live Template 后,我只需要敲 logp 就搞定了,如下動圖:

你看,連帶方法名和所有的引數串列,全部一鍵寫好!那么是如何做到的呢?用到了 Live Template 變數 和 groovy 腳本,
詳細步驟如下:
1 新建一個 Live Template, 取名叫 logp,(步驟參考上一節,略過),如下圖:

2 Template Text 中輸入如下:
log.info("$METHOD_NAME$: $METHOD_PARAMETERS$", $METHOD_PARAMETERS_VALUES$);
$END$
3 點擊 Edit Variables,上面的 $METHOD_NAME$ 等就是變數,可以配置這些變數的值,配置如下圖:

- METHOD_NAME:選用 idea 自帶的方法 methodName(),即獲取方法名;
- METHOD_PARAMETERS:是一段 groovy 腳本,如下:
groovyScript("_1.collect { it + '={}' }.join(', ')", methodParameters())
- METHOD_PARAMETERS_VALUES:是一段 groovy 腳本,如下:
groovyScript("_1.collect { it }.join(', ')", methodParameters())
groovy 腳本里的 methodParameters(),參考的是 idea 自帶的方法,即獲取方法引數串列,
怎么樣,是不是很強大!Live Template 的更多玩法,留給大家自己去實作,
7.3 福利說明
在我的 idea 中,已經配置好了大量開箱即用的 Live Template,比如:
- logp:上面解釋的,自動列印引數串列;
- loge:拋例外時,自動列印引數串列和例外資訊,日志級別為 ERROR;
- lstr:自動生成 List
- aslist:自動生成 Arrays.asList()
- ifempty:自動生成 if (CollectionUtils.isEmpty($collection$))
還有更多,就不一一列舉了,如果想獲取這些開箱即用的 Live Template, 可以關注我的公眾號,回復關鍵字 LiveTemplate,就可以了,
發送給你的是 idea setting.zip,包括了 Live Template,以及前文介紹的一些高效配置,都在這個里面了,你直接匯入就可以用了,
8 結束語
這篇文章,可以說是滿滿的干貨,前前后后好幾個晚上都在加班寫!尤其是動圖部分,為了做到最好的演示效果,錄制了很多遍!
如果你看完也有點識訓,可以 點贊+關注+分享 三連走一波,謝謝!
我是梅小西,最近在某東南亞電商公司做 DevOps 的相關事情,從本期開始,將陸續分享基于 Jenkins 的 CI/CD 作業流,包括 Jenkins On k8s 等,
如果你對 Java 或者 Jenkins 等感興趣,歡迎與我聯系,微信:wxweven(備注 DevOps),也歡迎關注:

本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481168.html
標籤:Java
