IntelliJ是否有快捷方式生成返回this的Setter?若没有,还有哪些实现链式Setter的方法?
IntelliJ是否有快捷方式生成返回this的Setter?若没有,还有哪些实现链式Setter的方法?
嘿,这个问题我刚好碰到过,给你几个实用的解决方案:
一、IntelliJ自带快捷方式:修改Setter代码模板
你完全可以通过调整IntelliJ的内置模板,让它一键生成返回this的链式Setter,步骤很简单:
- 打开IntelliJ设置(快捷键
Ctrl+Alt+S,或顶部菜单File→Settings) - 依次展开
Editor→File and Code Templates→Code - 找到并选中「Setter」模板,把默认代码替换成下面的内容:
public ${CLASS_NAME} set${NAME}(${TYPE} ${NAME}) { this.${NAME} = ${NAME}; return this; }
- 点击
Apply保存后,再用Alt+Insert(或右键→Generate)选择生成Setter时,就能直接得到支持链式调用的方法了!
二、更省心的方案:用Lombok的@Accessors注解
既然你已经在用Lombok了,直接用@Accessors(chain = true)注解就能搞定,完全不用手动改模板或写代码。只要把这个注解加到你的HomeWork类上:
@Data @Builder @FieldDefaults(level = AccessLevel.PRIVATE) @Accessors(chain = true) // 新增这一行 class HomeWork { List<Question> questions; double totalMarks; double receivedMarks; boolean passed; }
这样Lombok自动生成的所有Setter都会返回this,你就能直接链式调用:
homeWork.setReceivedMarks(85.0).setPassed(true);
三、另一种思路:用Builder的toBuilder()方法
如果你更倾向于保持原有实例不可变,可以给@Builder加上toBuilder = true参数:
@Data @Builder(toBuilder = true) // 开启toBuilder功能 @FieldDefaults(level = AccessLevel.PRIVATE) class HomeWork { // 成员变量不变 }
之后可以基于已有实例创建新的Builder,修改属性后生成新对象:
HomeWork updatedHomeWork = homeWork.toBuilder() .receivedMarks(85.0) .passed(true) .build();
这种方式不会修改原有实例,适合需要保证对象不可变性的场景。
备注:内容来源于stack exchange,提问作者prince
相关产品推荐
相关产品推荐

