我有一个包含数十个字段的POJO,我必须设置所有字段的值。
如何避免忘记设置某些字段的值?
// POJO
public class Employee {
private Date birthday;
private String firstName;
private String lastName;
private String birthOfPlace;
// ...
// setters and getters
}
// Main class
public class MainClass {
public static void main(String[] args) {
Employee employee = new Employee();
// Call all the setters of Class Employee
employee.setFirstName("Jack");
employee.setLastName("Reed");
employee.setBirthOfPlace("Iceland");
// Oops, forget to call setBirthday()
}
}
据我所知,对于您的要求,没有银弹解决方案:在某些时候,您必须为对象中的所需字段添加一个值,或者编写代码来检查您是否这样做了。
但是,如果您无论如何都想尝试,有一种不错的方法可以确保在需要时存在最关键的字段:构造函数参数。
public Employee(String firstName, String lastName, Date birthday) {
this.firstName = firstName;
this.lastName = lastName;
this.birthday = birthday;
}
只要你不在这个类中实现另一个构造函数,使用此代码,你将被迫为每个员工提供名字、姓氏和日期,这意味着他们永远不会不存在(除非你传递 null,但避免这样做,这可以说是不好的做法(。如果需要存在所有字段,则需要构造函数中的许多匹配参数。
另一种方法是使用嵌入式生成器。
在类中使用内部 Builder 类和具有必需参数的构造函数,例如 firstName
:
public static class Builder {
private String firstName;
private String lastName;
public Builder(String firstName) {
this.firstName= firstName;
}
public Builder lastName(String lastName) {
lastName = lastName;
return this;
}
确保只能通过构建器创建对象