工欲善其事必先利其器,若是有一款IDE可讓你更高效地專一於開發以及源碼閱讀,爲何不試一試?java
本文轉載自:netty技術內幕git
3月27日,jetbrains正式發佈期待已久的IntelliJ IDEA 2018.1,再次讓人眼前一亮:什麼,還能這麼玩?正則表達式
下面,咱們來快速瞭解一下 IDEA 2018.1 最新版本給咱們帶來哪些驚喜docker
IDEA對java代碼的自動化生成使人驚歎,一個alt+enter或者alt+/能夠省去不少敲打鍵盤的操做。本次更新對stream api的支持更加智能化,如上圖,若是對一個list filer掉指定的type以後,在後續的map操做中,自動給你加上一個cast。api
IDEA智能檢測代碼邏輯,將本來醜陋的代碼自動改寫,while優化也是繼承自此理念。上圖中展現的是,while if break 邏輯,直接修改爲do while,代碼顏值和易理解程度明顯提高。數組
使用過IDEA的同窗可能會常常看到代碼裏面有灰色的代碼,這就提示你,這段代碼是多餘了,不可達的代碼,能夠刪掉,代碼更乾淨整潔。上圖中展現的是,當你已經使用了try resource的方式來自動關閉資源,沒有必要再手動調用一次close,顯示成灰色,alt+enter一鍵自動刪除。微信
這個功能也是很是貼心,不得不佩服jetbrain對產品細節的打磨。若是你代碼裏面有一堆字符串常量,想作一個簡單的按字母排序,只須要在數組上按下alter+enter,而後sort conetnt,IDEA會自動排序,秒級完成。intellij-idea
拷貝構造函數在實際項目開發過程當中也是比較常見的,經過同一個類的對象,生成另一個對象,這個過程當中,若是少set了一個屬性,在後續的邏輯中很容易出現NPE。上圖展現的是,當你實現拷貝構造函數的時候,忘了拷貝
myFileFilter
和 myForcedToUseIdeaFileChooser
這兩個屬性,IDEA會給你智能提示,讓你修改。ide
postfix能夠說是IDEA裏面最有特點的一大功能,和live template並駕齊驅,完成一些很是快速的操做,關於這兩個強大的功能能夠翻到文末我以前錄製的視頻課程,這裏不過多介紹。在這以前,我一直以爲postfix比不上live template,是由於他不支持自定義模板,一直想不通爲何jetbrain不開發這個功能來提升postfix的地位,沒想到2018.1終於實現了自定義模板。函數
上圖中,自定義了
.do
這個postfix,咱們在敲了一個表達式以後,喚出 .do
這個postfix,IDEA自動送你一個do while循環,而且隨後光標自動跳轉到你接下來須要書寫邏輯的地方,棒不棒?
這個功能是IDEA對自動生成類文件的加強,IDEA的自動生成類文件,舉兩個簡單的例子
你建立好一個接口以後,直接在接口名處按下alt+enter,動一動上下鍵,一路按回車,能夠給你自動生成這個接口的實現,默認後綴爲Impl
你要對當前類寫個UT,直接在當前類下按下cmd+shift+t,一路按回車,動一動上下鍵,空格鍵,能夠給你自動生成這個類的UT,默認後綴爲Test
以前這個默認值在IDEA中是不能修改的,新版本不只能夠修改這個默認後綴,甚至連默認前綴也能夠修改,自由度更高,可讓自動生成的類更加貼合你的代碼風格
IDEA的debug功能能夠說讓我愛不釋手,不管是bug的排查,源碼的閱讀,超多驚豔的功能幾乎每次都能讓你瞬間定位關鍵代碼。在以前的版本,IDEA已經實現了表達式(段落)求值,動態值修改,force return等強悍的調試功能,新版增長了Exception模擬功能。debug的時候,你能夠在任意一個地方,模擬異常的拋出,這在驗證代碼的異常完備性方面很是有用。
在閱讀netty源碼的過程當中,我最喜歡的功能就是使用IDEA的調用棧迅速瞭解某段代碼執行的上下文環境,調用棧被掛起以後,只須要動一動上下方向鍵,就能夠快速熟悉這段代碼的執行路徑。
新版本中,如上圖,IDEA對breakpoint的功能獲得進一步的加強,讓你的斷點調試在控制檯留下軌跡,每通過一個斷點,都會在控制檯打印出這個斷點的調用棧,下次,能夠不用調試你就能知道斷點處的代碼原始的調用鏈是什麼。
IDEA對文本的處理能夠說是至關強悍了,不管搜索仍是替換,能夠自定義範圍,文件名,甚至支持預覽效果。新版本對全局文本替換功能進行進一步的擴充,上圖展現的是,你想把全部
xxController
文件替換成 xxProducer
,直接上兩段正則表達式就能夠迅速完成,而且在窗口下方實時預覽修改後的效果。
IDEA和Spring的整合能夠說是完美無缺,Spring IOC和AOP的特性在IDEA中獲得了充分的可視化體現,無比強大的關聯功能讓人歎爲觀止,詳細能夠翻到文末我錄製的視頻。
新版本更是對SpringBoot的整合達到了一種登峯造極的程度。上面圖展現的是,當你的SpringBoot應用啓動以後,在全部對外提供API的方法,你均可以直接點個鼠標就能夠發起HTTP調用,發起HTTP調用有兩種方式:
一種方式是直接發起調用,不用手動輸入url,調用以後結果直接展現在控制檯
另一種調用方式更爲強大,IDEA給你自動給你生成一個.http文件,這個文件裏面,你能夠自定義http請求的參數,url,而且每一次調用的結果都保存爲一個文本文件,甚至能夠進行調用結果的對比。
IDEA對git的可視化支持以及各類快速便捷的操做在代碼衝突解除、開源代碼歷史版本追溯、code review發揮了強大的做用,你根本不須要第二個可視化版本控制工具。在IDEA的版本控制管理的概念裏有一個changelist的術語,指的是,你能夠把每一處更改扔到不一樣的變動集合裏,提交代碼的時候,你能夠選擇不一樣的變動集合進行提交,剩下的變動集合,變動還在,可是不會提交到倉庫中。這個應用場景是,好比,你遇到一個新項目,想快速瞭解這個項目,你能夠隨意作修改,把這些修改扔到一個自定義的changelist中,而在真正完成task的時候(通常剛開始接觸新項目,實現的需求都比較簡單,幾行代碼搞定),把需求實現的變動集進行提交便可,以前的實驗代碼能夠留在你的項目中,你能夠進一步地作實驗。
本次版本的更新,細粒度版本控制獲得了進一步的加強,上面這幅圖展現的是,你在提交代碼的時候,窗口右半側左邊欄,每一處改動都會有一個單選框,若是你在code review的時候,不想提交某一處改動,只須要把前面的單選框取消勾選便可,這樣,結果就是,代碼還在本地項目中,可是不會提交到版本庫。
此外,你還能夠把你不想提交的代碼扔到一個自定義changelist裏,代碼還在,可是不會提交,如上圖。
在閱讀netty源碼的過程當中,有的時候我會發現註釋和代碼邏輯牛頭不對馬嘴,因而,我使用了IDEA的git歷史記錄功能以後發現,原來這段註釋是應用在好久以前的代碼上的,老代碼註釋一直未刪除,這也說明了你在閱讀開源項目的時候,不要盲目相信權威,要多思考,要相信本身的判斷。
本次git的歷史記錄的加強,指的是,你在閱讀某個版本的代碼,想了解這個版本中的某一個文件的提交歷史,你能夠直接在這個文件上右鍵,而後查看針對當前版本,查看這個文件的提交歷史,全部的改動盡收眼底。
對的,新版本IDEA終於支持彈出式java doc了,當你鼠標放到某個方法,參數,類型上去的時候,自動給你彈出對應的文檔的解釋,而且給出文檔表現形式是通過美化的。
IDEA之因此如此優秀,是由於jetbrain一直會關注行業的最新動態,迅速實現對java生態圈中熱門技術的整合。我記得當年Docker剛火起來的時候,IDEA就已經開始對Docker的整合了,而且在每一個版本里面迅速迭代,目前IDEA對docker的支持已經作得很是出色了。上圖展現的是IDEA對Kubernetes的支持,只敲了幾個字母,一個Kubernetes資源文件模板就生成了,而後,一個批量編輯,光標自動定位,一個完整的資源文件就已經寫完了,IDEA在2018.1版本中對Kubernetes的支持作了很是多的加強,感興趣的同窗能夠看下官網博客的專題介紹 https://blog.jetbrains.com/idea/2018/03/intellij-idea-2018-1-kubernetes-support/
以上就是我對本次 IntelliJ IDEA 2018.1 版本更新的解讀,若是你很是迫切想提高開發效率,提高代碼質量,能夠點擊閱讀原文跳轉到個人IDEA系列課程(點到章節tab以後可使用微信登陸觀看),免費,看完這個課程以後再來讀這篇文章,可能會更容易理解。
最後,若是你想快速提升閱讀源碼效率,想快速解決你在學習netty過程當中的任何問題,歡迎加入個人星球,我會在此不按期分享閱讀源碼的各種技巧,每一個技巧均立竿見影