开发过程中,需要对类和方法添加注释,类的注释比较好实现,通过设置模板,在创建时即可自动创建预设的注释。而为方法添加注释,则就没那么容易,最主要的影响在于参数的处理上。
对于IDEA,在接口的方法上方输入/**+回车后,会自动创建格式化注释
/**
*
* @param id
* @return
*/
Share get(String id);
当对于其他方法,按照上面操作,则只会创建一个简单的多行注释,无参数信息
/**
*
*/
public Share get(String id) {
Share share=new Share();
share.setId(id);
share.setUserId("1");
share.setTitle("我的分享");
//使用Feign调用远程服务
// UserDto userDto = userService.getUser("1");
UserDto userDtoParam=new UserDto();
userDtoParam.setId("2");
UserDto userDto = userService.query(userDtoParam);
String userName=userDto.getName();
share.setUserName(userName);
return share;
}
那么,如何为任意方法生成模板化的注释,以提升开发效率呢?
对于IDEA,首先想到的是live template功能,可以自定义代码片段,通过自定义缩略语,快速完成,之前自己也配置过,参照以往经验,进行如下配置:
模板定义
/**
*
$params$
* @return
*/
变量定义
使用内置方法methodParameters来获取参数。
实际运行结果是……
/**
*
* @return
*/
public void get(String id,String name) {
}
发生了什么呢?实际并没有取到方法参数,通过搜索,发现很多人说,只有放到方法内部,才能获取到方法参数,再手工剪贴到方法体外……试了下,确实是这样,但是,这不是折腾吗?不提降低效率这事,就这么个操作法,这得多别扭。
于是,进一步找寻解决方案,发现有个关键问题,是模板中的/,会导致methodParameters方法失效,要求模板不能有/,然后出现了一种解决办法,即将/*从模板中拿走,由外部输入,即
*
*
$params$
* @return
*/
这时候,要求输入/*+自定义的缩略词+tab,这时候,参数能读取了,但是多个参数显示成一个数组,这样子……怎么来指定每个参数的含义?
/**
*
[id, name]
* @return
*/
Share get(String id,String name);
此外,网上也有不少人,说缩略词必须设置为*,并且说这样很巧妙,不过我实在看不出巧妙在哪,也试验过,缩略词任意,比如d,只要保证外部输如/*就行了,这种方式,依旧相当别扭。
继续探索方案,发现使用groovy脚本来解析参数数组,具体如下:
模板定义
**
*
$params$
* @return
*/
变量定义
groovyScript("if(\"${_1}\".length() == 2) {return ' * ';}
else
{def result='';
def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();
for(i = 0; i < params.size(); i++) {
result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\n':'')};
return result;}", methodParameters());
这是自己进行反复调试后可实现最终期望结果的脚本,网上有很多,存在各种瑕疵,比如,对于无参数的方法,同样会生成一行 @param ,此外常见的还有生成空白行、错位等。
使用时,只需输入/+ 缩略词+tab即可
/**
*
* @param id
* @param name
* @return
*/
Share get(String id,String name);
从上面可以看出,自己配置这个模板还是比较费劲,还有另外一种思路,使用idea插件,名字为Easy Javadoc,安装后,选中方法名,按快捷键ctrl+\,可以直接生成方法注释,同时,进行翻译,效果如下。
/**
* 得到
*
* @param id 身份证件
* @param name 名称
* @return {@link Share}
*/
Share get(String id,String name);
这个插件有几个地方需要注意:
1.默认的热键ctrl+\与idea内置的一个操作冲突,需要修改下快捷键设置
2.默认的翻译引擎是谷歌,可能因为被墙,并不能正常进行,可在设置里更换为百度翻译或有道翻译
该插件的详细介绍可参见我的另一篇专门介绍的文章:https://blog.csdn.net/seawaving/article/details/122335967