當前位置:
首頁 > 知識 > 代碼生成利器IDEA強大LiveTemplates

代碼生成利器IDEA強大LiveTemplates

Java 開發過程經常需要編寫有固定格式的代碼,例如說聲明一個私有變數, logger 或者 bean 等等。對於這種小範圍的代碼生成,我們可以利用 IDEA 提供的 Live Templates 功能。剛開始覺得它只是一個簡單的 Code Snippet ,後來發現它支持變數函數配置,可以支持很複雜的代碼生成。下面我來介紹一下 Live Templates 的用法。

基本使用

IDEA 自帶很多常用的動態模板,在 Java 代碼中輸入 fori ,回車就會出現

for (int i = 0; i

GIF/17K

按 Tab 可以在各個空白處跳轉,手動填值。

自定義 Template

官方自帶模板畢竟不能滿足我們個人編碼風格的需要, Live Templates 提供了變數函數的方式供我們自定義。

簡單用法

新增自定義模板,首先需要填寫觸發單詞(即 Abbreviation),描述是可選的,然後定義模板的上下文,點擊 define 選擇 Java ,這樣在編輯 Java 的時候就會觸發當前模板,定義完上下文之後,就可以填寫模板了。

下面列舉幾個我常用的簡單模板

========== ---------- System.out.println($END$) ==========

----------private final static String $varName$ = "$var$";` ==========

----------/** * $COMMENT$ */@Getter@Setterprivate $TYPE$ $NAME$; ========== ----------public static void main(String[] args) { $END$ } ==========

模板支持變數的定義,使用 $$ 包圍的字元表示一個變數。 $END$ 是一個特殊的預定義變數,表示游標最後跳轉的位置。每個變數的位置都可以跳轉過去。

高級用法

如果你用過 vim 的 Code Sinppet 插件,你會發現模板裡面是可以執行函數的,強大的 Live Templates 當然也支持,而且 IDEA 能夠感知代碼的語義,例如說當前編輯的函數的參數。但這一點就能夠讓我們玩出花來。我們從易到難來研究模板函數的功能。

前面我們提到的變數可以綁定函數,配置方式如上圖所示。

快速聲明變數

聲明變數是一個常用的操作,特別是需要聲明變數需要加註解,注釋的時候,這些代碼寫起來就很枯燥。下面是我定義的模板:

----------/** * $END$ */@OsgiReference@Setterprivate $TYPE$ $NAME$;

乍一看這個模板跟我上面定義的 privateField 差不多,唯一的不同在於我給這些變數綁定了函數。

clipboard() :返回當前粘貼板的字元串

decapitalize() :將輸入的字元串首字母變為小寫

下面我們演示一下,我們先拷貝當前類名,然後輸入 osgiRef

快速聲明 logger

聲明 logger 也是一個常用的操作,上面我們是利用了粘貼函數來快速聲明變數,現在我們來利用另一個函數 className() ,顧名思義,它的作用就是返回當前類名。

----------/** logger */private static final Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);

最強大的 groovyScript()

如果說上面用到的函數提供的能力有限,不夠靈活,那麼 groovyScript() 提供了一切你想要的能力,它支持執行 Groovy 腳本處理輸入,然後輸出處理後的字元串。

groovyScript("code", ...) | code | 一段Groovy代碼或者Groovy腳本代碼絕對路徑 | | ... | 可選入參,這些參數會綁定到`_1, _2, _3, ..._n`, 在 Groovy 代碼中使用。|

下面我們來看一下它的實際應用。

快速 bean 配置

新增一個服務都要在 Spring 中註冊一個 bean,一般這個配置無非就是將指明 id 和 class ,由於我們是在 xml 中配置,所以不能利用 className() 函數,但是我們可以利用 clipboard() 函數獲取到類的全引用,在 IDEA 中我們直接右鍵類名,點擊 Copy Reference 就行。然後執行 groovy 腳本獲取類名。

----------

id 綁定 decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())) ,首先取 clipboard() 的值得到類的全引用,然後執行 groovy 代碼 _1.tokenize('.')[-1] (按 . 分割為字元串數組,然後取最後一個即可得到類名,然後用 decapitalize() 將首字母小寫即可得到 id 。

GIF/110K

快速列印當前上下文信息

列印錯誤日誌的時候需要列印當前上下文信息的,例如說入參,有時候入參很多的時候,寫起來很痛苦,好在有模板函數 methodParameters() ,返回當前函數參數的列表,當然這個列表我們不能直接使用,需要結合 groovyScript 對它進行轉化。

--------------- LogUtil.$TYPE$(LOGGER, "$MSG$ " + $params$);

將 params 綁定到 groovyScript("'"' + _1.collect { it + ' = [" + ' + it + ' + "]'}.join(', ') + '"'", methodParameters()) ,就能夠自動將當前函數的參數格式化後輸出。

GIF/64K

轉發分享是一種美德

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java吧 的精彩文章:

最簡單的Dubbo框架 SOA服務入門教程 附源碼
JAVA零基礎應該從哪裡入手
10分鐘讀懂html5 多了啥?
程序員晉陞之路五職場榜樣
程序員晉陞之路三初入職場的上升空間在哪裡

TAG:java吧 |

您可能感興趣

Gradle Kotlin DSL的accessors 生成問題
WordPress怎麼生成sitemap.xml?插件XML Sitemap & Google News
CodeWarrior IDE使用Tips-使用burner將elf文件轉換生成HEX和BIN文件的方法和步驟詳解
NetCore2.1 WebAPI 根據swagger.json自動生成客戶端代碼
使用gradle生成Spring Boot應用的Docker Image
Regenerate Thumbnails讓WordPress重新生成特色圖像更簡單
Additive Works推出用於生成3D列印支撐的新Amphyon模塊
SpringMVC,Spring,Hibernate框架自動生成器
Mybatis+velocity自動生成代碼
GreenDAO系列(二)GreenDao 代碼生成策略分析
Ian Goodfellow:生成對抗網路 GAN 就是強化學習 超全資料
Ian Goodfellow:生成對抗網路 GAN 就是強化學習(超全資料)
TensorFlow官方力推、GitHub爆款項目:用Attention模型自動生成圖像字幕
DeepMind 最新Science論文:生成查詢網路GQN
使用 Lets Encrypt 生成免費的 SSL 證書
OpenAI「假新聞」生成器GPT-2的最簡Python實現
「Science重磅」DeepMind生成查詢網路GQN,無監督學習展現3D場景
LeaFlet學習之結合turf.js生成簡單的等值線demo
rapid-generator自動生成代碼步驟
「python」生成器的高級應用send、close和throw方法