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と一緒に使わないように書いてます。
