Redian新闻
>
写 bug 速度提升200%!吊爆的 IDEA 使用技巧

写 bug 速度提升200%!吊爆的 IDEA 使用技巧

公众号新闻

大家好,今天分享一篇idea技巧,让我们少写一些重复代码,提高效率~

背景

Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能。刚开始觉得它只是一个简单的Code Snippet,后来发现它支持变量函数配置,可以支持很复杂的代码生成。下面我来介绍一下Live Templates的用法。

基本使用

IDEA 自带很多常用的动态模板,在 Java 代码中输入fori,回车就会出现

for (int i = 0; i < ; i++) {

}

按Tab可以在各个空白处跳转,手动填值。

自定义 Template

官方自带模板毕竟不能满足我们个人编码风格的需要,Live Templates提供了变量函数的方式供我们自定义。

简单用法

新增自定义模板,首先需要填写触发单词(即 Abbreviation),描述是可选的,然后定义模板的上下文,点击define选择Java,这样在编辑 Java 的时候就会触发当前模板,定义完上下文之后,就可以填写模板了。

下面列举几个我常用的简单模板

==========
<out>
----------
System.out.println($END$)
==========
<pfs>
----------
private final static String $varName$ = "$var$";`
==========
<privateField>
----------
/**
 * $COMMENT$
 */

@Getter
@Setter
private $TYPE$ $NAME$;
==========
<main>
----------
public static void main(String[] args) {
     $END$
}
==========

模板支持变量的定义,使用$$包围的字符表示一个变量。是一个特殊的预定义变量,表示光标最后跳转的位置。每个变量的位置都可以跳转过去。

高级用法

如果你用过 vim 的Code Sinppet插件,你会发现模板里面是可以执行函数的,强大的 Live Templates当然也支持,而且 IDEA 能够感知代码的语义,例如说当前编辑的函数的参数。但这一点就能够让我们玩出花来。我们从易到难来研究模板函数的功能。

前面我们提到的变量可以绑定函数,配置方式如上图所示。

快速声明变量

声明变量是一个常用的操作,特别是需要声明变量需要加注解,注释的时候,这些代码写起来就很枯燥。下面是我定义的模板:

<osgiRef>
----------
/**
 * $END$
 */

@OsgiReference
@Setter
private $TYPE$ $NAME$;

乍一看这个模板跟我上面定义的privateField差不多,唯一的不同在于我给这些变量绑定了函数。

  • clipboard():返回当前粘贴板的字符串
  • decapitalize():将输入的字符串首字母变为小写

下面我们演示一下,我们先拷贝当前类名,然后输入osgiRef

快速声明 logger

声明 logger 也是一个常用的操作,上面我们是利用了粘贴函数来快速声明变量,现在我们来利用另一个函数className(),顾名思义,它的作用就是返回当前类名。

<logger>
----------
/** 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 脚本获取类名。

<bean>
----------
<bean id="$id$" class="$REF$" />

id绑定decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())),首先取clipboard()的值得到类的全引用,然后执行 groovy 代码_1.tokenize('.')[-1](按.分割为字符串数组,然后取最后一个即可得到类名,然后用decapitalize()将首字母小写即可得到id。

快速打印当前上下文信息

打印错误日志的时候需要打印当前上下文信息的,例如说入参,有时候入参很多的时候,写起来很痛苦,好在有模板函数methodParameters(),返回当前函数参数的列表,当然这个列表我们不能直接使用,需要结合groovyScript对它进行转化。

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

将params绑定到groovyScript("'"' + _1.collect { it + ' = [" + ' + it + ' + "]'}.join(', ') + '"'", methodParameters()),就能够自动将当前函数的参数格式化后输出。

总结

上面我们简单介绍了常用的模板函数,其实 IDEA 还有很多其它模板函数,具体参考Creating and Editing Template Variables。IDEA 是一个很强大的工具,善用工具能够极大的提高工作效率,将精力投入到关键的事情上,而不是将时间浪费在编写重复代码上面。一些更高级的用法还有待大家去发掘。最后推广一波我写的代码生成插件CodeMaker,好好利用也能节省很多重复编写代码的时间。

来源:blog.xiaohansong.com/idea-live-templates.html


Java后端编程专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!
文明发言,以交流技术职位内推行业探讨为主
广告人士勿入,切勿轻信私聊,防止被骗
加我好友,备注:加群,拉你进群


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
我要吐槽邮轮,常在河边走终于湿鞋了。两个小孩相继中了stomach bug,吐一天,拉一天,估计以后再也不坐邮轮了巨爽!吊打同类产品的夏凉被,价格居然这么低……好日子开始啦!Linux 下让工作效率翻倍的四个实用技巧1件顶3件!吊带+美背+无痕bra,实用百搭,挑战30套穿搭不重样!开发者使用GPT-4创建 “金刚狼”,实现自修复bug巨爽啊啊啊啊啊啊啊啊啊!!!吊打同类产品的夏凉被,价格居然这么低……老版孙猴子扮相的一个小 Bug阅读不再痛苦,5大技巧快速提升阅读速度和理解力!打工人都去吊单杠吧!吊吊更健康中概股赴美上市重拾势头,香港IPO市场吸引力再度提升UOS V20专业版年度更新发布,多文件盘外拷贝速度提升超过 900%天,刚才在自己身上发现了 bed bug𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶内衣裤,软弹有度,上身0束缚~将心理疾病治疗效率提升20%,英国NHS孵化数字疗法企业融资金额超过3000万美元【海外案例】400000000000000000倍!这是真正的天文数字→中兴新支点 OS 桌面环境正式开源,仅 104 M,速度提升 20%这 5 个冷门且实用的 Kubectl 使用技巧,99%的人都要知道第四范式开源强化学习研究通用框架,支持单智能体、多智能体训练,还可训练自然语言任务!训练速度提升17%直播预约 | 升级管理习惯(下)——业务管理者如何做好绩效教练及应用技巧多GPU通信效率提升4倍,RLHF生成提升2.25倍!DeepSpeed ZeRO++重磅升级大话三国278:张飞的使用技巧,马超和张飞到底谁厉害?酒店Bug价:凯悦难得出Bug,10欧元入住全新收购的酒店品牌那一年,母亲走了AIGC|快速掌握ChatGPT的5个实用技巧速度提升数十倍,只需一张图一句话,谷歌新模型20秒即可实现变脸认识bug,理解bug,爱上debug!大二科研小白,发论文啦!万豪Bug级别住二送一大礼包的免房券已入账,但是没想到又出了新的Bug经验大放送 | 南方985经济学,二战老狗,笃定钟情人大大数据院上岸,数三130,专业课135,专业课难度提升,我却毫不畏惧!传播中国文化,推广中国诗歌6月黑马上线!吊打99%爱情片,这片看一部少一部!【𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶无痕内裤】49元三条!巨巨巨好穿 !!简直就是辣妹顶配,食品级冰箱收纳盒【一日团】中兴新支点OS桌面环境正式开源,仅104M,速度提升20%酒店Bug价:32美元入住曼谷五星级铂尔曼行政套房,含行政酒廊使用权好日子开始啦!5 个冷门且实用的 Kubectl 使用技巧,99%的人都要知道花粉病大模型赋能高智商劳动密集型产业,效率提升20倍
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。