如何避免在 POJO 中错过设置字段值?



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

确保只能通过构建器创建对象

相关内容

  • 没有找到相关文章

最新更新