这个特定问题有几个可能的原因,所以如果没有你的所有代码,很难说出失败的原因。
这是对我有用的代码:
(ns test)
(gen-class
:main false
:name test.Company
:methods [[setCompanyName [String] void]])
(defn -setCompanyName [this company] (println (str "company : " company)))
笔记:
- 你不需要任何吸气剂
- 该方法的签名在 :methods 向量中指定。
- 你的函数应该有一个额外的“this”参数
- gen-class 宏根据宏的参数生成一个类,所以根本不看-setCompanyName 函数定义。
我发现 javap 命令对查看 gen-class 生成的内容非常有用:
javap.exe -classpath classes/ test.Company
public class test.Company extends java.lang.Object{
public static {};
public test.Company();
public java.lang.String toString();
public boolean equals(java.lang.Object);
public java.lang.Object clone();
public int hashCode();
public void setCompanyName(java.lang.String);
}
我还建议您查看http://clojuredocs.org/clojure_core/clojure.core/gen-class上的第二个示例,了解如何管理状态。