目录
大部分开发人员,不论是前端,还是后端,应该会使用jetbrains
的编辑器,比如前端的web storm
,后端的idea
、Goland
,其提供了快速生成代码和代码注释的工具,即live templates
和File and Code Templates
。
File and Code Templates
使用模板原因
我们希望在创建java文件时,便将开发者姓名、创建时间,类信息描述等便一起写入,此时,我们可以利用````File and Code Templates```帮我们做这件事。
如何使用模板
我的电脑是window系统,Windows可以如此来设置:File - > Settings -> Editor -> File and Code Templates,如图所示:
变量解释
就类似于${USER}
这样的字段做如下解释:
字段 | 含义 |
---|---|
${PACKAGE_NAME} | 创建类所在的包名称 |
${NAME} | 你在弹出框中的类名称 |
${USER} | 用户系统登录名 |
${DATE} | 系统日期 |
${TIME} | 系统时间 |
${YEAR} | 本年 |
${MONTH} | 本月 |
${MONTH_NAME_SHORT} | 本月的前三个字母【针对英文月份】,比如Jan【一月】, Feb【二月】 |
${MONTH_NAME_FULL} | 本月的全名【针对英文月份】,比如January(一月), February(二月)等 |
${DAY} | 当天 |
${HOUR} | 本小时 |
${MINUTE} | 当前分钟 |
${PROJECT_NAME} | 本项目名称 |
生成代码
如上设置好File and Code Templates
,于是区创建一个Test.java
类
新创建的Test.java
代码,自动生成了作者名和当前时间,如下所示:
package com.example.demo.demo;
/**
* @author zhangsan
* @datetime 2022/7/20 17:41
* @desc 这是一个测试类
*/
public class Test {
}
如果想要自动生成其他信息,可以参考表格中的字段,自行设置。
live templates
使用模板原因
我们在创建代码时,可以使用File and Code Templates帮我们自动生成注释,但我们有时想要自动生成类似如下的代码:
输入main 生成 public static void main(String[] args) { }
输入sout 生成 System.out.println();
输入fori 生成 for (int i = 0; i < ; i++) {}
...
此时,我们可以使用live templates
,执行如下步骤,来制定某种规则,帮我们快速生成代码,如下图解释。
如何使用模板
创建模板组【template group】,比如我创建的是myTemplate
在模板组下创建模板【live template】
我想实现输入try
,即可输出这样的代码:
try{
} catch (Exception e) {
log.error("error",e);
}
因而,我们可以在live templates
这样配置:
变量解释
字段 | 含义 |
---|---|
Abbreviation | 即你想要缩写的词,比如上文中的 try |
Description | 描述当前缩写词的的意思,比如输入try,列出try-catch |
Template text | 此处缩写模板,比如 try{$action$} catch (Exception e) {log.error(“error”,e);$end$ } |
生成注释
当然,Template text旁边有个Edit variables
按钮,改按钮是用来定义变量的,这是什么意思呢?
比如,我想要输入fun
即可实现方法注释,因而,我可以这样设计:
/**
* @author $user$
* @datetime $date$:$time$
* @desc
*/
此时,单击Edit variables
,即出现下图的弹出框:
弹出框Edit Template Variables的字段解释
字段 | 含义 |
---|---|
Name | 你所定义的变量名,比如 $user$ |
Expression | 变量对应的表达式,比如user()输出本电脑的用户名,date()输出当天日期 |
Default Value | 默认值,如果没有选择表达式,则会使用默认值输出 |
Skip if defined | 此复选框可让 IntelliJ IDEA 继续处理下一个输入字段,前提是定义了当前输入字段的值 |
Expression表达式的字段解释
字段 | 含义 |
---|---|
user() | 返回系统登录名 |
time() | 返回当前日期 |
annotated(“annotation qname”) | 创建带有指定位置注释的类型符号。 |
arrayvariable() | 建议适用于当前范围的所有数组变量。例如,在迭代组中查看活动模板。 |
anonymoussuper() | 提出一种科特林级对象表达类型。 |
сamelcase(字符串) | 返回作为参数传递的字符串,转换为骆驼格。例如,我的文本文件/我的文档/ my_text_file将转换为mytextfile。 |
capitalizeandunderscore(scamelcasename) | 利用CamelCase的名称作为参数传递的所有信件,并插入一个下划线之间的部分。例如,如果一个参数是要通过字符串,然后返回foo_bar。 |
casttoleftsidetype() | 将右侧表达式投射到左侧表达式类型。它在迭代组中使用一个模板来生成原始类型和泛型集合。 |
className(sclassname) | 返回当前类的名称(扩展模板的类)。 |
classnamecomplete() | 这个表达式替换变量位置上的类名完成。 |
clipboard() | 返回系统剪贴板的内容。 |
camelCase(字符串) | 返回字符串的字符串snake_case camelCase。例如,如果一个参数是foo_bar通过字符串,然后返回foobar。 |
complete() | 这个表达式替换了变量位置上的代码完成调用。 |
completesmart() | 该表达式替代变量位置上的智能类型完成调用。 |
componenttypeof(<数组变量或数组类型>) | 返回数组的组件类型。例如,在其他组中的迭代组中查看活动模板。 |
currentpackage() | 返回当前包名。 |
date() | 以指定格式返回当前系统日期。默认情况下,当前日期是以默认的系统格式返回 |
decapitalize(SNAME) | 用相应小写字母替换作为参数传递的名称的第一个字母。 |
descendantclassenum(<字符串>) | 显示类的子字符串作为参数输入。 |
enum(scompletionstring1,scompletionstring2,…) | 建议在模板调用中完成的逗号分隔字符串列表。 |
escapestring(sescapestring) | 转义指定字符串。 |
expectedtype() | 返回作为整个模板的结果所期望的类型。如果模板在赋值的右边,在返回之后扩展,则是有意义的。 |
fileName() | 以扩展名返回文件名。 |
filenamewithoutextension() | 返回没有扩展名的文件名。 |
firstWord(sfirstword) | 返回作为参数传递的字符串的第一个单词。 |
groovyscript(“Groovy代码”) | 用指定的代码返回Groovy脚本。你可以使用多个参数的groovyscript宏。第一个参数是执行的脚本文本或包含脚本的文件路径。接下来的参数绑定到_1,_2,_3,…_n变量都可以在你的脚本。同时,_editor变量可在脚本。此变量绑定到当前编辑器。 |
guesselementtype(<集装箱>) | 对存储在一个java.util.collection元素类型的猜测。猜想,IntelliJ IDEA试图找到地方的元素被添加到或从容器中提取。 |
iterablecomponenttype(< arrayoriterable >) | 返回一个组件类型,如数组或集合。 |
iterablevariable() | 返回可以重复的变量的名称。 |
linenumber() | 返回当前行号。 |
lowercaseanddash(字符串) | 返回以破折号分隔的小写字符串,作为参数传递的字符串。例如,字符串转换为我的名字MyExampleName。 |
methodname() | 返回拥抱方法的名称(在模板扩展的地方)。 |
methodparameters() | 返回方法(扩展模板)的参数列表。 |
methodreturntype() | 返回当前方法返回的值的类型(扩展模板的方法)。 |
qualifiedclassname() | 返回当前类的完全限定名称(扩展模板的类)。明显缩短FQ名称”复选框。 |
rightsidetype() | 用右侧表达式的类型声明左侧变量。它在迭代组中使用一个模板来生成原始类型和泛型集合。 |
snakecase(scamelcasetext) | 从CamelCase返回snake_case字符串字符串作为参数传递。 |
细节提醒
File and Code Templates和live templates变量区别
live templates的变量定义和File and Code Templates不一样,File and Code Templates是${variable_name}
定义变量,而live templates使用 $variable_name$
定义变量
解决csdn无法输出$$
如果这样输入$user$,csdn无法输出$
符号,因而,我们需要使用转义字符,如图所示: