news 2026/8/27 14:59:59

进阶玩法:用intellij-generateAllSetMethod的Velocity模板定制你自己的代码生成规则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进阶玩法:用intellij-generateAllSetMethod的Velocity模板定制你自己的代码生成规则

进阶玩法:用intellij-generateAllSetMethod的Velocity模板定制你自己的代码生成规则

【免费下载链接】intellij-generateAllSetMethodIntellij plugin to generate call to setter method value for class项目地址: https://gitcode.com/gh_mirrors/in/intellij-generateAllSetMethod

intellij-generateAllSetMethod 是一款 IntelliJ IDEA 插件,能一键为类的所有字段生成 setter 默认值调用。更强大的隐藏能力是:它内置了 Velocity 模板引擎,让你不用写一行 Java 代码,就能自定义代码生成规则——想生成什么代码,写个模板就行。

为什么你需要自定义生成模板

插件自带的生成功能(全量 setter、getter、Builder、Converter)已经覆盖大部分场景,但真实项目里总有一些"个性化"需求:

  • 只想给部分字段赋默认值,其余字段跳过
  • 默认值要按团队规范来,比如时间统一LocalDateTime.now()、金额统一new BigDecimal("0")
  • 生成代码时自动带上注释、断言或日志语句
  • 生成非 setter 类的代码片段,比如初始化集合的样板代码

这些需求,改源码不现实,而 Velocity 模板让你"配置即生效"。

3 步开启 Velocity 模板生成

第 1 步:打开设置面板,勾选模板开关

进入Settings → Tools → GenerateAllSetter,勾选Generate by template选项。这一项的开关逻辑定义在 GenerateAllSetterSettingForm.java 中。

第 2 步:新建模板并编写内容

  • 点击工具栏的+(Add)按钮,输入一个模板名称
  • 在右侧带语法高亮的编辑器中编写 Velocity 模板(编辑器按.vm文件类型渲染,写起来很舒服)
  • 左侧列表支持多个模板并存,点选即可切换编辑;不想要的模板用删除按钮移除

模板的增删与持久化状态保存在 GenerateSetterState.java,重启 IDE 后不会丢失。

第 3 步:在变量上触发 Generate by template

把光标放在一个局部变量上,按Alt+Enter(macOS 为 Option+Enter),选择Generate by template意图。插件会弹出模板选择对话框,实时渲染出生成结果,确认后插入到代码中。这一步的入口实现见 GenerateByTemplateAction.java,渲染对话框见 TemplateDialog.java。

模板变量速查表:只有 2 个核心变量

很多人以为模板变量会很多,实际上模板上下文只注入了两个变量(见 VelocityUtils.java),其余都能从类对象上取到:

变量类型说明
$theClassPsiClass变量所属的类,可通过$theClass.methods$theClass.fields遍历成员
$variableNameString当前触发意图的局部变量名

常用取法:

  • $theClass.methods—— 遍历所有方法(可配合#if($method.name.startsWith("set"))过滤 setter)
  • $method.parameterList.parameters[0].getType().canonicalText—— 拿到 setter 参数类型的完整类名
  • 官方文档中的模板自定义说明也提供了变量对照表

读懂内置模板:10 分钟学会语法

项目仓库里就躺着一份可直接抄作业的内置模板 template.vm,它实现了"给每个 setter 按类型赋默认值"的完整逻辑。核心套路就三板斧:

#foreach($method in $theClass.methods) #if($method.name.startsWith("set") && $method.hasParameters()) #set($parameterType=$method.parameterList.parameters[0].getType().canonicalText) #if($parameterType.equals("java.util.Date")) #set($defaultValue="new Date()") #else #set($defaultValue="null") #end $variableName.${method.name}(${defaultValue}); #end #end
  • #foreach ... #end:遍历类的所有方法
  • #if / #elseif / #else:按参数类型分发默认值(内置模板为FloatBigDecimalLocalDate等二十多种类型都写了规则)
  • #set:定义局部变量
  • $variableName.${method.name}(...):变量插值,拼出user.setName("...")这样的调用

你只需要照着内置模板改条件分支,就能得到自己的生成规则。

一键 Debug:改完模板立即看效果

不用退出设置页去写测试代码——面板上有一个Debug按钮:输入任意一个项目里存在的类名,点一下,插件会立即用该类和示例变量名demo渲染你的模板,并把结果弹窗展示出来。

这个"所见即所得"的调试闭环来自 GenerateAllSetterSettingForm.java 中 Debug 按钮的监听器,调用的还是同一个 VelocityUtils.java 渲染入口。

⚠️小提示:如果模板写错了,VelocityUtils会把异常堆栈直接放进生成的文本里返回——看到 "catch exception when generate" 开头的输出,就说明模板语法有问题,按堆栈提示修正即可。

总结

  • 自定义模板 = 勾选Generate by template+ 建模板 +Alt+Enter 选 Generate by template,三步完成
  • 核心变量只有$theClass$variableName,其余信息都能从类对象上取
  • 照着内置 template.vm 改条件分支,就是最快的上手路径
  • 用 Debug 按钮实时预览,模板零试错成本

掌握 Velocity 模板后,intellij-generateAllSetMethod 从"好用的插件"变成了"你的私人代码生成器",值得每个重度 IDEA 用户花十分钟体验一下。

【免费下载链接】intellij-generateAllSetMethodIntellij plugin to generate call to setter method value for class项目地址: https://gitcode.com/gh_mirrors/in/intellij-generateAllSetMethod

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 14:47:04

【小白教程】一文讲清楚大模型中8个关键词及原理:LLM、Transformer、GPT、Bert、预训练、微调、深度学习、Token

什么是大模型? 你是不是脑子里浮现的是 OpenAI、ChatGPT、DeepSeek?还有各式各样能跳个舞、可以翻个跟头的机器人?再深入点的,还能说出训练与推理。 有没有一种感觉:就是身边的信息都在声嘶力竭的鼓吹大模型正在改变世…

作者头像 李华
网站建设 2026/8/27 14:42:45

电动车识别检测数据集:1306张图片+VOC/YOLO/JSON三格式,附YOLO实战教程

简介:目标检测任务中,数据的质量和格式往往决定模型的上限。无论是训练YOLO、Faster R-CNN还是MMDetection,都离不开规范化的标注文件。常见的数据集格式包括VOC的XML、YOLO的TXT以及COCO风格的JSON,它们各自服务于不同的工具链&a…

作者头像 李华
网站建设 2026/8/27 14:42:10

从零开始学大模型:LLMs、RAG与AI Agent的区别与应用,程序员必看收藏

前言对于接触 AI 相关的朋友,平时都会遇到很多新的概念,先不说什么大模型的技术性的术语,就AI应用方面的术语就非常多。 而且,现在还是依旧层出不穷。 在技术迭代到一定程度之后,它就必然会满足更多的实际场景&#xf…

作者头像 李华
网站建设 2026/8/27 14:41:57

AI Agent入门到精通:大模型智能体架构详解,程序员必备收藏资源

1、AI Agent的概念 AI Agent(智能体)是一种不需要持续人类干预的AI系统,可以基于环境和背景信息,自主分析各种问题,做出逻辑决策,并且在没有持续人类输入的情况下处理多种任务。Perception(输入…

作者头像 李华