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 に答える