Effective Java プログラミング言語ガイド
Joshua Bloch ジョシュア・ブロック
名著なんで今更なんでしょうが、非常に面白いです。こういう本大好き。
equalsメソッドはきちんと実装しなさいって話なんかも興味深いです。例えば、DateクラスとそのサブクラスのTimestampで実装されているequals。以下のようにテストしてみると、マナー違反であることがわかります。
import java.util.Date; import java.sql.Timestamp; class Test{ public static void main(String[] args){ Date d = new Date(2006, 5, 16); Timestamp t = new Timestamp(2006,5,16,0,0,0,0); System.out.println(d.equals(t)); System.out.println(t.equals(d)); } } 結果: true false
この結果だとdとtが等しいのか等しくないのかわかりません。java.sql.Timestampの実装はよくないので、真似すべきではないということです。ドキュメントには、java.util.Dateと一緒に使わないように書いてます。