栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2009年2月12日 星期四

clone compare equals

  Java 有三個極端常用的 function : clone compare equals 。如果你不懂這三個是啥,就不用看下去。

  很多時,我們會寫一些極簡單的 class 。例如 DonKat 裡的一個音 class ,有 type start end scroll hitcount 這些簡單的參數。要如何對這個 class 做 clone compare equals 這些動作,本來就很顯而易見。
  然而, Java 本身並沒有很好的 Deep clone, Deep compare, Deep equals 的動作。對以上的class , clone, equals 說不定Java還會幫你做,但 compare 就一定要自己親手做。如果這個class 擁有一些 Object 的 member ,就更要連 clone, equals 也要自己作。
  試想想,你有10個 class ,每個 class 有 5 個 field 。你就要為每個 class 每個 field 寫一次 clone, compare, equals 的程式碼。寫了 150 行,你不能保證這 150 行全沒問題。未來還可能要為改動 class 而操心。

  我早兩年就已經注意到這個問題,解決方法也早就想過,但直到近日才開始實驗。方法是建立一個 Clonable 和 Comparable 的 Base Class ,這個 Class 會自動查找所有 Field 並進行 clone compare equals 的動作。由於這個 Class 事關重大,還會另寫一埋 junit 做 testing 。
  到未來,還會探究自動進行 XML IO 的可能性。

沒有留言: