別解 ClojureでJavaクラスのコンストラクタをapplyする。
以前こんな記事を書きましたが、ライブラリ探索していて new-by-name という関数を見付けました。これを使えば次のように apply + new が実現できます。
(use '[clojure.contrib.core :only (new-by-name)]) (use '[clojure.contrib.str-utils :only (re-split)]) (->> "2010-05-20 10:32:44" (re-split #"\D+") (map #(Integer/parseInt %)) (apply new-by-name "java.util.GregorianCalendar"))
new-by-name はクラス名からクラスのインスタンスを生成する「関数」です。関数ですので new のように悩むことなく、普通に apply ができます。
文字列で指定するという点がイマイチですが、それを除けば最も理想的な形でやりたいことが実現できると言えるんじゃないでしょうか。