将IDEA的setter代码模板改成链式setter
setter传统模式
UserInfo userInfo = new UserInfo();
userInfo.setUserId("zhangsan");
userInfo.setUserName("张三");
userInfo.setAge(18);
每一行都需要分号来隔断,影响编码效率。
链式setter
UserInfo userInfo = new UserInfo().setUserId("zhangsan").setUserName("张三").setAge(18);
做法是set方法的返回对象不再是void,而是this,指代当前对象。
好处很明显,一行可以写完对象的构建。不停地点,结合IDEA的自动提示,就能自动带出对应的setter方法。
问题
默认情况下,IDEA的setter模板的返回对象为void,导致生成的settter代码无法进行链式set。
UserInfo userInfo = new UserInfo().setUserId("zhangsan").setUserName("张三").setAge(18);
解决办法
#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}
将以上代码略做修改:
#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
$classname set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
return this;
}
前后的具体变化点:
- 第5行的void改为了:$classname
- 倒数第二行增加了:return this;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2024-01-18 maven多module时批量升级版本号