创建clojure库(jar)以便从java调用它

时间:2012-06-20 10:27:10

标签: java clojure

(ns lol.test
  (:gen-class
   :name lol.test
   :methods [[createHashMap [String] Java.util.HashMap]])
  (:import [java.util HashMap]))

(defn -createHashMap [this s]
  (HashMap. (assoc {} s "test")))

我正在尝试从java调用clojure函数,为此我创建了这个文件,它完全用lein编译,我通过调用“lein uberjar”来创建一个jar文件。

现在的问题是,当我从java这样调用它时:

lol.test l = new lol.test();
l.createhashMap("test");

抛出ArityException

Wrong number of args (2) passed to

我试图从clojure代码中删除'this'参数,但它没有帮助。这段代码有什么问题?

2 个答案:

答案 0 :(得分:2)

您需要修复:methods声明。现在你有

:methods [[createHashMap [String] java.util.HashMap]]

必须成为

:methods [[createHashMap [Test String] java.util.HashMap]]

否则你只在编译的类中获得1-arity方法。

答案 1 :(得分:0)

所以问题在于

Java.util.HashMap

java应该从小写字母开始。但更大的问题是clojure lib不想将java.util.HashMap作为对象返回。解决方案是将其序列化然后返回。