javaを入れて思うこと

最近のことだが、JavaSE6が出てたので入れた。
自分の中ではjavaはj2se1.4で止まっていて、やっとこさリフレクションが使いこなせるかな、という程度で
「未だにGenericを使ったコードを書いたことが無い」
恥ずかしながら、アノテーションとか言われると、もうさっぱりだ。
(とは、いいつつ、コレクションフレームワークへの新しいfor文は便利だ、と、思って使った記憶がある)
しかしそれでも、最新に追従したいという気持ちのカケラみたいなのはまだあって、
まぁ、それがJavaSE6を入手した理由でもあるんだろうけど。


ひょんなことから、javaで昨日の日付を取得するサンプルを書く必要に迫られた。
JavaSE6にはjavascript(rhino)のサブセットみたいなjrunscriptという環境が入っていて
そこだと


var yesterday = new Date();
var d = new Date();
yesterday.setTime(d.getTime() - (24 * 60 * 60 * 1000));
という感じで昨日を取り出せる。はずだ。コードはうろ覚えだから、あってない可能性もある。
さて、Javaで考える。
java.util.Dateが使えそうだ。
いや、まて、java.util.Calendarに、java.util.Dateを入れてだな、addDateで-1を足すことで
そもそも、なんでDateが至る所にあって、それとは別にCalendarなんてものがあるんだ。
とか、とか、とか、
調べると、そもそもだね、カレンダーというものは、グレゴリアンカレンダーがなんたらかんたら、世界中で使われるためにうんたらかんたら。
たいして役に立たないウンチクの宝庫を抜けた後に、だいたい、次のような感じのコードに落ち着いた。

java.util.Calendar cal = java.util.Calendar.getInstance();
java.util.Date d = cal.getTime();
cal.setTime(d);
cal.add(Calendar.DATE, -1);
で、それを文字列バッファに格納するために、printfチックなやつを使おうとしたら、Exceptionの嵐。
え?何?厳格にエラーを見るから、型を正しく?だと?
この辺でもっと、勉強をしないとな。と、は、思ったが。
もっとね、手っ取り早くやりたいんだよ。なんで、簡単なことやるのに、イチイチ「そもそも論」を学ばせようとするんだよ
たとえばさ、Oracleだとこれだけだぜ?

select sysdate - 1 from dual
ってことは、java.util.Dateよりも、java.sql.Dateでこの結果を取った方が楽じゃないか?
とさえ、思う。
あぁ、そうか。だから、SimpleDateFormatなんてものが別に用意してあるのか。って、そういえばそんなのあったよな。
なんだろう、基本的にjavaはそんなに嫌いではなかったはずなんだが、
こういう簡単な処理を小難しく、そもそも論でイチイチ回りくどくされるとムカッと来るときがある。
他にも固定長byte列からの部分列の取り出し、とか。
で、えらい時間をかけて「そもそも論」の塊を振りかざした「何にでも使える予定の」ライブラリというかフレームワークとか、が、javaの世界には多い気がする。
(設計は絶賛されたものの完成を見ずに空中崩壊したAvalon、とかね。いや、すごかったんだろうし、Jamesっていうリザルトも出したので評価されるべきか)
で、まぁ、そう思っていたときにタイムリーにこんなのを見つけて大爆笑してしまった。
まぁ、しかし、NetBeans5.5のコードアシスト機能は、よく出来てるな、と思った。
こいつが辛口のjavaをマイルドにしているように見えた。
なので、たまにはxyzzy以外にも手を出してみようかな、と、思わせる何かがNetBeansにはある。
なんか、昨日の話とはちょっと、流れが違うけど。そんな浮気性な自分にもちょっと反省。