Как не пропустить установку значения поля в POJO? - PullRequest
1 голос
/ 11 июня 2019

У меня есть 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 ]

1 голос
/ 11 июня 2019

Насколько я знаю, не существует решения «серебряной пули» для того, что вы просите: в какой-то момент вам придется либо добавить значение к необходимым полям вашего объекта, либо написать код, который проверяет, сделали ли вы это.или нет.

Однако, если вы все равно хотите попробовать, есть достойный подход, чтобы убедиться, что самые важные поля присутствуют при необходимости: параметры конструктора.

public Employee(String firstName, String lastName, Date birthday) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.birthday = birthday;
}

Пока выне реализуйте другой конструктор в этом классе, с этим кодом вы будете вынуждены предоставлять имя, фамилию и дату для каждого сотрудника, то есть они никогда не будут присутствовать (если вы не передадите ноль, но избегайтеделать это, возможно, плохая практика).Если вам нужно, чтобы все ваши поля присутствовали, вам понадобится столько соответствующих параметров в вашем конструкторе.

Альтернативой этому является использование встроенного Builder .

1 голос
/ 11 июня 2019

Используйте внутренний класс 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;
    }

Убедитесь, что вы можете создать объект только через Builder

...