将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;
posted @   漠孤烟  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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时批量升级版本号
点击右上角即可分享
微信分享提示