
IDEA里改live template比写插件快十倍
Java开发中重复写System.out.println、log.debug、空try-catch或DTO转VO的样板代码,真没必要手敲。IDEA自带的live template能直接用变量占位、自动补全、甚至带条件逻辑——改对位置、填对Expression,按两下Tab就出来,比复制粘贴还稳。
常见错误是把模板配在File and Code Templates里(那是生成新文件用的),结果敲psvm没反应;或者把live template设成“Always show dialog”,每次触发都弹窗,反而拖慢节奏。
- 进设置路径:
Settings > Editor > Live Templates,别去File and Code Templates - 新建模板时,
Abbreviation填短码(比如logd),Description写清用途(如“debug日志,含方法名”) - 勾选
Reformat according to style,否则生成后格式错乱 - 作用域选
Java,别选Everywhere——不然在JSON文件里敲sysout也硬要补全
logd模板怎么带当前方法名和行号
手动拼log.debug("xxx", Thread.currentThread().getStackTrace()[1].getMethodName())太重,且getStackTrace()有性能开销。IDEA原生支持methodName()和lineNumber()这两个Expression,不走反射,编译期就固化。
示例:定义logd模板内容为:
立即学习“Java免费学习笔记(深入)”;
log.debug("$MSG$ [" + methodName() + ":" + lineNumber() + "]");
其中$MSG$是可编辑变量,光标会停在这儿;methodName()取当前方法名,lineNumber()取当前行号——注意不是日志输出时的行号,而是模板展开处的物理行号。
-
methodName()在lambda里返回外层方法名,不是lambda本身(IDEA不支持lambda内方法名推导) - 如果模板里用了
className(),记得检查是否在内部类里——它返回的是OuterClass$Inner,不是单纯Inner - 别在模板里写
new Date()之类运行时表达式,Expression只支持IDEA内置函数,不执行Java代码
自定义getter/setter模板为什么没生效
IDEA默认的Generate > Getter and Setter用的是Code Generation模板,跟Live Templates是两套系统。想改getXXX()的命名风格(比如去掉get前缀)、加空行、或统一加@NonNull注解,得去Settings > Editor > Code Style > Java > Code Generation里调。
这里改的是代码生成器的行为,不是快捷键补全。比如把Template text改成:
public $TYPE$ $NAME$() {
return $FIELD$;
}
就能去掉get,但要注意:字段名$NAME$会变成小写首字母,$FIELD$才是原始字段名(如userName字段,$NAME$是userName,$FIELD$也是userName)。
- 修改后必须点
Apply,不点就白改 - 如果项目用了Lombok,这些模板实际不会被触发——Lombok的
@Getter在编译期注入,IDEA生成器压根不跑 - 多个字段批量生成时,模板只应用一次,不是每个字段都过一遍——所以别指望在模板里写循环逻辑
模板导出后在新机器上缺Expression报错
导出的.jar或.xml模板文件里,Expression字段是明文存的,比如methodName()。但新环境IDEA版本低(如2021.1以下),可能不认这个函数,导入后模板还能看见,一用就报Unknown function: methodName()。
这不是配置问题,是API兼容性断层。2021.2之后才稳定支持methodName()、className()等,早期版本只有groovyScript这种绕路方案。
- 查版本:菜单栏
Help > About,看Build号末尾是否≥212 - 降级方案:用
groovyScript("return _1.getName();")替代methodName(),但要多写一层包裹,且依赖Groovy插件启用 - 团队同步时,直接共享
Settings Repository比传XML更可靠——它连IDEA版本校验一起带了
最麻烦的不是功能没生效,是模板看着正常、用着报错、还不好定位——因为错误只在触发瞬间闪一下,日志也不记。建议改完模板,立刻在临时类里试一遍完整流程:输入缩写→Tab→编辑变量→回车,全程盯住右下角有没有黄色提示。










