2

使用下面的示例,是否有 Joshua Bloch 的防御性复制技术的优雅 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;
        }
      }
      ...
   }  
4

1 回答 1

5

好吧,您可以在实用程序类中有一个方便的方法:

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如果需要,静态导入可以隐藏部分。

或者,您可以使用主要使用不可变类型并且通常是更好的 API 的Joda Time :)

于 2011-09-26T18:42:16.550 回答