Пример элегантной реализации 'Защитного копирования' обнуляемого java.util.Date в реализации getB / setter JavaBean? - PullRequest
2 голосов
/ 26 сентября 2011

Существует ли элегантная Java-реализация методов защитного копирования Джошуа Блоха, используя приведенный ниже пример?Я думаю, что nullChecking - действительно проблема, но, возможно, есть гораздо более простой способ добиться защитного копирования.

   public class Audit {
      private Date dateCompleted;
      ...      
      public Audit() {
        super();
      }

      //defensive copy of dateCompleted
      public final Date getDateCompleted() {
        if (dateCompleted != null){
          return new Date(dateCompleted.getTime());
        }else{
          return null;
        }
      }

      public final void setDateCompleted(Date dateCompleted) {
        if (dateCompleted != null){
          this.dateCompleted = new Date(dateCompleted.getTime());
        }else{
          this.dateCompleted = null;
        }
      }
      ...
   }  

1 Ответ

5 голосов
/ 26 сентября 2011

Ну, вы можете иметь удобный метод в служебном классе:

public class DateUtils {
    public static Date defensiveCopy(Date date) {
        return date == null ? null : new Date(date.getTime());
    }
}

Тогда:

public final void setDateCompleted(Date dateCompleted) {
    this.dateCompleted = DateUtils.defensiveCopy(dateCompleted);
}

Статический импорт может скрыть часть DateUtils, если хотите.

В качестве альтернативы вы можете использовать Joda Time , который в основном использует неизменяемые типы и в целом является гораздо лучшим API:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...