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