gpt4 book ai didi

java - Builder模式中静态类的成员应该是final的吗?

转载 作者:行者123 更新时间:2023-12-02 05:13:49 24 4
gpt4 key购买 nike

所以我看到了一些关于构建器模式的示例。总之,静态类或构建器仅具有那些可以由构造函数初始化的最终成员。示例 -

public class User {
private final String firstName; // required
private final String lastName; // required
private final int age; // optional

private User(UserBuilder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.phone = builder.phone;
this.address = builder.address;
}

public String getFirstName() {
return firstName;
}

public String getLastName() {
return lastName;
}

public int getAge() {
return age;
}

public static class UserBuilder {
private final String firstName;
private final String lastName;
private int age;

public UserBuilder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

public UserBuilder age(int age) {
this.age = age;
return this;
}
}
}

为什么只有名字和姓氏是最终的,可以由构造函数初始化?然后就不能设置了?我的疑问是我不能从 First 和 Last 中删除 Final 并拥有一个初始化所有三个成员并在类中也有相应的 setter 的构造函数吗?

最佳答案

这里的设计是名字和姓氏总是必须设置,但年龄是可选的。 (我会在这里使用Integer,而不是默认为0...但无论如何我更愿意使用birthDate...但我离题了。)

“必需与可选”部分是通过强制在构造中出现名字和姓氏来传达的......那么为什么您还需要 setter 呢?您什么时候想在构造函数中将第一个名称设置为一个事物,然后更改它?

可以使字段成为非最终字段并添加 setter ...我只是认为这不是一件特别好的事情。这不是任何失败的问题,而只是通过 API 设计传达的内容发生了变化。

关于java - Builder模式中静态类的成员应该是final的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27133054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com