IDEA自定义模板注释(解决了参数与返回值为空的问题)
前言
相信很多人在设置模板注释的时候,尤其是在设置方法模板注释时,都遇到了各种问题(比如参数和返回值为空的情况)。也都在网上进行了很多搜索,但是你懂得,最终都无功而返,本文则将为你解决这一问题,由于设置类的模板注释很简单,网上搜索的方法也都可以解决生成类的模板注释的情况,因此本文不做介绍,将只介绍如何生成方法模板注释,此外还会详细介绍使用到的Groovy
脚本的具体含义,以便你可以写你自己的Groovy
脚本,满足你自己的需求,在最后还会通过一个Gif
动图,来展示具体的使用方法,话不多说,开始介绍。
创建模板
首先点击File -> Settings -> Editor -> Live Templates
,会出现以下界面:
然后我们需要点击+
,选择Template Group...
:
然后随便取一个名字,点击OK
:
然后按照下图,首先选中我们刚创建的Group
,然后点击+
并选择Live Template
:
然后在弹出的界面先填入图中标注的信息:
图中1
处的位置按照传统(相信大多数人以前也是这么设置的)就继续用*
了,对应的Template text
如下:
**
* description
$params$
*
$return$
* @author zjw
* @createTime $date$ $time$
*/
这里需要特别注意,Template text
的内容最开始处不可以是/**
开头,否则会出现参数和返回值为空的情况,看到这里你可能觉得你之前也这样设置过,也是不起作用,但是请你继续看下去,因为我之前也遇到过,此外我这里的Template text
也是为了配合之后脚本的代码,所以看起来可能不太一样。
然后需要需要按照下图的步骤设置一下Application Contexts
,需要选择Java
,结束之后记得点击一下Apply
:
配置脚本
完成了以上步骤后,就可以开始配置对应的脚本了,按照下图步骤,并在2
和3
处分别输入以下两个Groovy
脚本(脚本含义稍后介绍),4
和5
处在下拉框中选择系统默认的即可:
groovyScript("def result='';def flag=false;def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {if (!params[i].equals('')) {flag=true;result+='* @param ' + params[i] + ' ' + params[i] + ((i < params.size() - 1) ? '\\n\\t ':'')} else {result+=' *'}}; return flag ? ' *\\n\t ' + result : result", methodParameters())
groovyScript("def params=\"${_1}\";def index=params.lastIndexOf('.', params.indexOf('<'));if(index!=-1){params=params.substring(index+1);};index=params.indexOf('.');if(index!=-1&¶ms.indexOf('<')==-1){params=params.substring(index+1);};return ' * @return ' + params.replaceAll('java.lang.', '').replaceAll(',',', ');", methodReturnType())
完成一点配置后点击OK
和Apply
即可使用我们的模板啦。
注释使用测试
在讲解上述Groovy
脚本的含义之前,先来看一下我们上述配置的注释模板如何使用:
我们只需要在需要添加注释的方法上输入/*
然后按下Tab
即可生成,这里的*
对应着上述的Abbreviation
里配置的*
,等于使用*
去替换上述配置的Template text
,并在Template text
前加了一个/
,即可成功添加我们的注释模板,对应的Gif
操作动图如下:
脚本含义介绍
这里以设置$return$
的脚本为例,为了解释方便,将脚本做了一些格式化,代码及其含义直接如下,Groovy
和Java
的语法很相似,所以不难理解:
groovyScript("
// 将 methodReturnType() 的返回值转化为字符串赋给 params
// 默认的返回值格式为 pojo.User / java.lang.int 等形式
def params = \"${_1}\";
// 如果返回值有集合时,原始形式为 java.util.List<java.lang.Integer> 这种形式
// 这里获取 '<' 前的 '.' 下标
def index = params.lastIndexOf('.', params.indexOf('<'));
if (index != -1) {
// 执行到这里说明返回值有泛型,为了看着更舒服
// 这里的作用是把 java.util.List<java.lang.Integer> 变为 List<java.lang.Integer>
params = params.substring(index + 1);
};
// 这里继续获取 '.' 的下标
index = params.indexOf('.');
// 如果 '.' 存在,且不存在 '<' 说明返回值没有泛型
if (index != -1 && params.indexOf('<') == -1) {
// 把返回值为 pojo.User 这种变为 User
params = params.substring(index + 1);
};
// 当返回值为基本类型时,都会有 'java.lang.' 前缀
// 例如 java.lang.int ,这里去掉了 java.lang.
// 此外将返回结果中的 ','替换为', '是为了处理 有多个泛型参数的情况
// 例如原始返回值可能为 java.util.Map<java.lang.Integer,java.lang.String>
// 这里为了让泛型之间的 ',' 变成 ', ' 更加美观
// 需要注意的是,我没有处理 java.util.List<pojo.User> 这种情况
// 经过这些代码只会变为 List<pojo.User>, 这个就留给大家自己做了
return ' * @return ' + params.replaceAll('java.lang.', '').replaceAll(',', ', ');
",
methodReturnType()
)
注意
我这里只展示了处理return
的脚本代码的所有含义,代码中也显得有些丑陋,所以还是希望各位能写出各自的Grovvy
脚本,然后分享一下,因为我的param
的脚本写的太丑了,这里就不做讲解了,如果有问题,你也可以进行留言。
总结
本文讲解了使用IDEA
生成自定义方法模板注释可能会遇到的一些问题,当然可能因为一些版本原因,或者操作原因,你可能仍然会遇到一些问题,也欢迎你进行留言,一起讨论。
本文地址:https://blog.csdn.net/qq_41698074/article/details/109252069