« Plaggerを使ってみる | トップページ | DB2のコマンド行プロセッサで改行 »

DateのcompareToとTimestampのcompareTo

java.util.Dateとjava.sql.TimestampのcompareToメソッドの話。
java.util.Dateは、Javaで日付を表現するクラスです。一報java.sql.Timestampは、パッケージ名からもわかるようにDataBaseでの時間を表現するクラスです。ただ、Timestampは、java.util.DateのサブクラスでありTimestampには、compareToメソッドがオーバーライド実装されています。ここで1つ落とし穴があります。
compareToメソッドには、2種類あり compareTo(Date date)とcompareTo(Timestampe time) が定義されています。

ここで、compareTo(Date date)メソッドに対しjava.util.Dateのインスタンスを渡すと、なんとClassCastExceptionが発生します。ここでは、Timestampのインスタンスを渡さないといけないんですね。。今回はここではまりました。そして、じゃあ、compareToの対象を逆にする。
例:timestampInstance.compareTo(dateInstance)
                         ↓
     dateInstance.compareTo(timestampInstance)
としたら、どうなるでしょう。。これはOKですね。

と、ここで重要なのは、じゃあ、なぜオーバーライドしてるの?ってことです。
ソースを見ると、Dateでは、ミリ秒までを比較対象としTimestampでは、ナノ単位までを比較対象としているようです。また、内部でsuper.compareToを実施していますのでミリ秒レベルの比較に関しては同一のメソッドを利用していることになります。

APIとして定義している以上Dateクラスを引数として扱う場合のロジックもClassCastではなく準備しておいて欲しいところです。。(じゃなきゃそんなメソッドなくしてほしいのぅ)

|

« Plaggerを使ってみる | トップページ | DB2のコマンド行プロセッサで改行 »

「Javaの話」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/120118/3665485

この記事へのトラックバック一覧です: DateのcompareToとTimestampのcompareTo:

« Plaggerを使ってみる | トップページ | DB2のコマンド行プロセッサで改行 »