2

我有一个使用spring bean初始化初始化的clojure类。

我的setter方法如下

(defn -setCompanyName [货币] (println (str "company : " company)))

bean初始化如下

<bean id="company" class="test.Company"
        p:companyName="orce"/>

我收到以下错误。

bean 类 [test.Company] 的无效属性“companyName”:Bean 属性“companyName”不可写或具有无效的 setter 方法。setter 的参数类型是否与 getter 的返回类型匹配?

有谁知道这个问题的根本原因。

问候伊苏鲁。

4

2 回答 2

3

这个特定问题有几个可能的原因,所以如果没有你的所有代码,很难说出失败的原因。

这是对我有用的代码:

(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上的第二个示例,了解如何管理状态。

于 2012-05-17T14:56:17.543 回答
0

你不需要另一个函数参数吗?第一个充当“this”指针。我现在无法测试这个,因为我在我的手机上。

于 2015-11-22T02:11:59.413 回答