Javaの欠点?

Javaでは

new Date(new Date().getTime() - 20 * 60 * 1000);
とかくものが、Ruby (with ActiveSupport) では

20.minutes.ago
と書ける。簡潔でよろしい。

http://www.rubyist.net/~matz/20070526.html#p01

指摘自体は正しい。Javaは面倒すぎる。ただ、いつも思うのだが、このような言語機能が必要な局面って基本的なクラスに限られるんじゃないかなぁと。おそらく、リスト、連想配列、文字列、数値、日付、真偽値、nullにさえ簡易的なシンタックスが用意されていれば、新たな言語機能など必要ないのではなかろうか*1

最近、Java5を使っているが総称型にしても列挙型にしてもfor each構文にしても微妙に便利ではない(逆に一見問題含みのautoboxingがとても便利)。総称型の不便さはどちらかと言えば、MapのentrySetがfor each構文と組み合わせて使えない(互換性の問題だろうな)とか、今まで通りの使い方をしているとコンパイラがwarningを出してくれやがるとかそういう問題なのでいったん置いておくとしても、列挙型は今まで同じクラス内に書けた定数が別のクラスに出てしまうことでわかりにくさが増してしまうのは明らかに問題だし、for each構文は何番目なのか判断できないのでいまいち使い勝手が悪い(まぁ、これはJavaのfor each構文に限った話ではないが)。

話が飛んでしまうが、Diiguにあるような引数名のクラスファイルへの埋め込みは標準でサポートされないんだろうか。これができないといつまで経ってもeclipseの引数がarg0とかに変換されてしまうし、JSON-RPC1.1で予定されている名前付きパラメータへの対応が難しくなってしまう。Dao関係も同様。

最近、新言語ブームということもありJava=新たなCOBOL扱いだが、Java=Excitingだった時代に育った私にはなかなか受け入れ難い。年を取ったということかな。

*1:Java7でCollectionとBigDecimalに対するoperator overloadingが用意されるらしい