You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ是否有快捷方式生成返回this的Setter?若没有,还有哪些实现链式Setter的方法?

IntelliJ是否有快捷方式生成返回this的Setter?若没有,还有哪些实现链式Setter的方法?

嘿,这个问题我刚好碰到过,给你几个实用的解决方案:

一、IntelliJ自带快捷方式:修改Setter代码模板

你完全可以通过调整IntelliJ的内置模板,让它一键生成返回this的链式Setter,步骤很简单:

  1. 打开IntelliJ设置(快捷键Ctrl+Alt+S,或顶部菜单File→Settings)
  2. 依次展开Editor→File and Code Templates→Code
  3. 找到并选中「Setter」模板,把默认代码替换成下面的内容:
public ${CLASS_NAME} set${NAME}(${TYPE} ${NAME}) {
    this.${NAME} = ${NAME};
    return this;
}
  1. 点击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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:19:30