我有一个包含数十个字段的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()
}
}
答案 0 :(得分:1)
在类内部使用带有必需参数的构造函数的内部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;
}
确保只能通过构建器创建对象
答案 1 :(得分:1)
据我所知,对您的要求没有灵丹妙药:有时,您必须在对象的所需字段中添加一个值,或者编写代码来检查是否已完成是否。
但是,如果您仍然想尝试,有一种不错的方法来确保在需要时显示最关键的字段:构造函数参数。
public Employee(String firstName, String lastName, Date birthday) {
this.firstName = firstName;
this.lastName = lastName;
this.birthday = birthday;
}
只要您没有在此类中实现其他构造函数,就使用此代码,将被迫为每位员工提供名字,姓氏和日期,这意味着它们永远不会出现(除非您传递null,但避免这样做,这无疑是一种不好的做法)。如果需要显示所有字段,则构造函数中将需要许多匹配的参数。
对此的另一种选择是使用嵌入式Builder。