代碼生成利器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
轉發分享是一種美德
※最簡單的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方法