如何避免在POJO中缺少设置字段的值?

时间:2019-06-11 09:34:36

标签: java pojo required-field

我有一个包含数十个字段的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()
   }
}

2 个答案:

答案 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