(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'参数,但它没有帮助。这段代码有什么问题?
答案 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作为对象返回。解决方案是将其序列化然后返回。