2013-02-25 28 views
2

我想使用Java構造函數作爲第一類Clojure函數。我用例是一系列字符串轉換成有一個字符串構造函數的Java對象序列:如何在Java構造函數中使用Clojure memfn?

簡單Java對象:

public class Foo { 
    public Foo(String aString){ 
    // initialize the Foo object from aString 
    } 
} 

和Clojure中我想這樣做:

(defn make-foo (memfn Foo. a-string)) 
(apply make-foo '("one" "two" "shoe")) 

的應用應該返回美孚對象的列表從字符串創建的,但我發現了這一點:

IllegalArgumentException No matching method found: org.apache.hadoop.io.Text. for class java.lang.String clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53) 

回答

7

不要打擾。實際上已棄用memfn以支持匿名函數文字,您也可以調用構造函數,例如#(Foo. %)

另外,您的apply調用將嘗試用三個字符串參數調用make-foo一次。你可能想要:

(map #(Foo. %) ["one" "two" "three"])