<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          強(qiáng)大的 IDEA 代碼生成器,真香!

          共 2921字,需瀏覽 6分鐘

           ·

          2020-10-23 13:50

          前言

          Java 開(kāi)發(fā)過(guò)程經(jīng)常需要編寫有固定格式的代碼,例如說(shuō)聲明一個(gè)私有變量,logger或者bean等等。對(duì)于這種小范圍的代碼生成,我們可以利用 IDEA 提供的 Live Templates功能。剛開(kāi)始覺(jué)得它只是一個(gè)簡(jiǎn)單的Code Snippet,后來(lái)發(fā)現(xiàn)它支持變量函數(shù)配置,可以支持很復(fù)雜的代碼生成。下面我來(lái)介紹一下Live Templates的用法。

          基本使用

          IDEA 自帶很多常用的動(dòng)態(tài)模板,在 Java 代碼中輸入fori,回車就會(huì)出現(xiàn)
          for (int i = 0; i < ; i++) {

          }
          img
          按Tab可以在各個(gè)空白處跳轉(zhuǎn),手動(dòng)填值。

          自定義 Template

          官方自帶模板畢竟不能滿足我們個(gè)人編碼風(fēng)格的需要,Live Templates提供了變量函數(shù)的方式供我們自定義。

          簡(jiǎn)單用法

          新增自定義模板,首先需要填寫觸發(fā)單詞(即 Abbreviation),描述是可選的,然后定義模板的上下文,點(diǎn)擊define選擇Java,這樣在編輯 Java 的時(shí)候就會(huì)觸發(fā)當(dāng)前模板,定義完上下文之后,就可以填寫模板了。
          img
          下面列舉幾個(gè)我常用的簡(jiǎn)單模板
          ==========

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

          ----------
          privatefinalstatic String $varName$ = "$var$";`
          ==========

          ----------
          /**
          * $COMMENT$
          */

          @Getter
          @Setter
          private $TYPE$ $NAME$;
          ==========

          ----------
          public static void main(String[] args) {
          $END$
          }
          ==========
          模板支持變量的定義,使用$$包圍的字符表示一個(gè)變量。是一個(gè)特殊的預(yù)定義變量,表示光標(biāo)最后跳轉(zhuǎn)的位置。每個(gè)變量的位置都可以跳轉(zhuǎn)過(guò)去。

          高級(jí)用法

          如果你用過(guò) vim 的Code Sinppet插件,你會(huì)發(fā)現(xiàn)模板里面是可以執(zhí)行函數(shù)的,強(qiáng)大的 Live Templates當(dāng)然也支持,而且 IDEA 能夠感知代碼的語(yǔ)義,例如說(shuō)當(dāng)前編輯的函數(shù)的參數(shù)。但這一點(diǎn)就能夠讓我們玩出花來(lái)。我們從易到難來(lái)研究模板函數(shù)的功能。
          img
          前面我們提到的變量可以綁定函數(shù),配置方式如上圖所示。

          快速聲明變量

          聲明變量是一個(gè)常用的操作,特別是需要聲明變量需要加注解,注釋的時(shí)候,這些代碼寫起來(lái)就很枯燥。下面是我定義的模板:

          ----------
          /**
          * $END$
          */

          @OsgiReference
          @Setter
          private $TYPE$ $NAME$;
          乍一看這個(gè)模板跟我上面定義的privateField差不多,唯一的不同在于我給這些變量綁定了函數(shù)。
          1.clipboard():返回當(dāng)前粘貼板的字符串
          2.decapitalize():將輸入的字符串首字母變?yōu)樾?/span>
          下面我們演示一下,我們先拷貝當(dāng)前類名,然后輸入osgiRef
          img

          快速聲明 logger

          聲明 logger 也是一個(gè)常用的操作,上面我們是利用了粘貼函數(shù)來(lái)快速聲明變量,現(xiàn)在我們來(lái)利用另一個(gè)函數(shù)className(),顧名思義,它的作用就是返回當(dāng)前類名。

          ----------
          /** logger */
          privatestaticfinal Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);
          img

          最強(qiáng)大的 groovyScript()

          如果說(shuō)上面用到的函數(shù)提供的能力有限,不夠靈活,那么groovyScript()提供了一切你想要的能力,它支持執(zhí)行 Groovy 腳本處理輸入,然后輸出處理后的字符串。
          groovyScript("code", ...)

          | code | 一段Groovy代碼或者Groovy腳本代碼絕對(duì)路徑 |
          | ... | 可選入?yún)?,這些參數(shù)會(huì)綁定到`_1, _2, _3, ..._n`, 在 Groovy 代碼中使用。|
          下面我們來(lái)看一下它的實(shí)際應(yīng)用。

          快速 bean 配置

          新增一個(gè)服務(wù)都要在 Spring 中注冊(cè)一個(gè) bean,一般這個(gè)配置無(wú)非就是將指明id和class,由于我們是在 xml 中配置,所以不能利用className()函數(shù),但是我們可以利用clipboard()函數(shù)獲取到類的全引用,在 IDEA 中我們直接右鍵類名,點(diǎn)擊Copy Reference就行。然后執(zhí)行 groovy 腳本獲取類名。

          ----------
          "$id$"
          class="$REF$" />
          id綁定decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())),首先取clipboard()的值得到類的全引用,然后執(zhí)行 groovy 代碼_1.tokenize('.')[-1](按.分割為字符串?dāng)?shù)組,然后取最后一個(gè)即可得到類名,然后用decapitalize()將首字母小寫即可得到id。
          img

          快速打印當(dāng)前上下文信息

          打印錯(cuò)誤日志的時(shí)候需要打印當(dāng)前上下文信息的,例如說(shuō)入?yún)ⅲ袝r(shí)候入?yún)⒑芏嗟臅r(shí)候,寫起來(lái)很痛苦,好在有模板函數(shù)methodParameters(),返回當(dāng)前函數(shù)參數(shù)的列表,當(dāng)然這個(gè)列表我們不能直接使用,需要結(jié)合groovyScript對(duì)它進(jìn)行轉(zhuǎn)化。

          ---------------
          LogUtil.$TYPE$(LOGGER, "$MSG$ " + $params$);
          將params綁定到groovyScript("'"' + _1.collect { it + ' = [" + ' + it + ' + "]'}.join(', ') + '"'", methodParameters()),就能夠自動(dòng)將當(dāng)前函數(shù)的參數(shù)格式化后輸出。
          img

          總結(jié)

          上面我們簡(jiǎn)單介紹了常用的模板函數(shù),其實(shí) IDEA 還有很多其它模板函數(shù),具體參考Creating and Editing Template Variables(https://www.jetbrains.com/help/idea/2016.3/creating-and-editing-template-variables.html)。IDEA 是一個(gè)很強(qiáng)大的工具,善用工具能夠極大的提高工作效率,將精力投入到關(guān)鍵的事情上,而不是將時(shí)間浪費(fèi)在編寫重復(fù)代碼上面。一些更高級(jí)的用法還有待大家去發(fā)掘。最后推廣一波代碼生成插件CodeMaker(https://github.com/x-hansong/CodeMaker),好好利用也能節(jié)省很多重復(fù)編寫代碼的時(shí)間。
          推薦閱讀
          騰訊 Git 規(guī)范出爐,寫給開(kāi)發(fā)者的指南!
          最棒 Spring Boot 干貨總結(jié)(超詳細(xì),建議收藏)
          我的天,Spring Boot 居然還有 Plus 版本

          瀏覽 46
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本污网站 | 欧美黄色A片1234区 | 激情青青草| 波多野结衣一区二区三区在线观看 | 大鸡巴视频在线 |