使用 this 关键字配合建造者模式可提升代码清晰性与健壮性:明确成员赋值、支持链式调用、保障 build() 逻辑闭环,且 Builder 必须为非 static 内部类以正确使用 this。
用 this 关键字配合建造者模式,能写出既清晰又不易出错的实体构建代码。核心不是堆砌语法,而是让每一行都在表达“谁在操作、操作谁、意图是什么”。重点在于:构造逻辑分离 + 成员访问明确 + 链式调用自然。
在建造者内部类中,每个 setter 方法都应使用 this 显式引用当前建造者实例的字段。这不只是风格问题,它直接防止拼写错误、IDE自动补全更准、团队协作时一眼分清是字段还是临时变量。
name = val; —— 编译通过但易误写成局部变量,且无法触发 IDE 对字段的智能提示this.name = val; —— 明确告诉读者和编译器:这是在设置当前 Builder 实例的 name 字段userName,字段叫 loginName),也建议统一用 this,保持整套 Builder 的可读一致性建造者模式的流畅性来自方法链。每个配置方法(如 name()、age())必须返回 this,且返回类型声明为当前 Builder 类型(不是 void)。这样调用才能连起来,语义也更接近自然语言。
Builder 或 People.Builder,而不是 void 或泛型 T
public Builder name(String val) { this.name = val; return this; }
build() 方法本质是把 Builder 当前持有的所有字段,一次性传递给目标实体。这里用 this 不仅是语法需要,更是逻辑闭环的体现:你构建的,就是此刻这个 Builder 实例所承载的全部数据。
private People(Builder builder) { this.name = builder.name; ... }
return new People(this); —— 这里的 this 就是调用 build() 的那个 Builder 实例,语义清晰无歧义建造者类通常声明为 static final 内部类,这是为了不持有外部类引用、防止内存泄漏。但要注意:static 类中不能直接访问外部类的非 static 成员,也不能在 static 方法里用 this —— 因为此时没有“当前实例”。