【发布时间】:2020-01-29 20:36:24
【问题描述】:
我已经(使用Builder 模式)构建了一个包含三个字段Name、Age 和Gender 的Employee 对象。
public class Employee {
private String name;
private String age;
private String gender;
// Constructor
private Employee(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
}
// Employee Builder
public static class Builder {
private String name;
private String age;
private String gender;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(String age) {
this.age = age;
return this;
}
public Builder gender(String gender) {
this.gender = gender;
return this;
}
}
// Getters
public String getName() {
return name;
}
public String getAge() {
return age;
}
public String getGender() {
return gender;
}
}
现在我在下面的类中构建了我的 Employee 对象,
public class TestEmployee {
public static void main(String[] args) throws IOException {
Employee employee = new Employee.Builder().age("23").gender("Male").name("John").build();
System.out.println("Name : " + employee.getName());
System.out.println("Age : " + employee.getAge());
System.out.println("Gender : " + employee.getGender());
}
}
如何通过破坏已构建的员工对象来修改员工“John”的年龄?
仅供参考:我不想在我的 Employee 对象中包含 Setters。
【问题讨论】:
-
反射是一种选择?
-
不,他绝对不应该使用反射。
-
@Kayaman builder 用于创建不可变对象..当您说 builder 我信任您并假设它是不可变的..我看不到其他修改不可变对象的方法..
-
创建不可变对象然后通过反射修改它们存在逻辑缺陷。仅仅因为你能做到并不意味着你应该这样做。如果要修改已创建的对象,请不要使其不可变。
-
这是一个否定自己的问题。作者不明白他问的是什么。 IE:我怎么吃苹果,然后手里拿着同一个苹果?