ツールにバグがあるように見えるときは、寝るしかない。こういう精神状態を記録すべく、今日の日記を書いている。
J2SDK1.4.2_04-b05では、ここのFigure 3にあるサンプルが、ParseExceptionを投げるように思えるのは、私のせいだろうか。
結論:DateFormat#parseはロケールに暗黙的に依存して動作を変える。日本語ロケールでは、英語の月名に対してParseExceptionを投げる。
ロケールは一種のグローバル変数である。それも、宣言なしに暗黙的に存在する。暗黙的に存在するグローバル変数に、暗黙的に依存しているわけだ。
Javaは、Objectからのキャストにキャスト演算子を書かせる(この仕様を決めた糞馬鹿に三度アナテマ)くらいExplicitにこだわった言語だが、ライブラリではこんな仕様がまかり通っているとは夢にも思わなかった。
SimpleDateFormatのスレッドセーフの件といい、DateFormat関係(というよりTaligentの書いたもの全部)は早急にまともなものと取り替える必要があると思われる。