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;