北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Effective Java読んでます

Effective Java プログラミング言語ガイド
Joshua Bloch ジョシュア・ブロック
4894714361

名著なんで今更なんでしょうが、非常に面白いです。こういう本大好き。

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