2012-05-17 61 views
2

我有一個clojure類,我初始化使用spring bean初始化。春豆初始化 - Clojure

我的設定器的方法如下

(DEFN -setCompanyName [貨幣](的println(STR 「公司」 公司)))

豆初始化如下

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

我收到以下錯誤。

bean類的屬性'companyName'無效屬性[test.Company]:Bean屬性 'companyName'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型相匹配?

有沒有人知道這個問題的根本原因。

Regards Isuru。

回答

3

對於這個特殊問題有幾種可能的原因,所以如果沒有你所有的代碼,很難說出什麼是失敗的。

下面是對我的作品的代碼:

(ns test) 

(gen-class 
    :main false 
    :name test.Company 
    :methods [[setCompanyName [String] void]]) 

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

注:

  • 需要任何吸氣
  • 方法的簽名是在指定的:方法向量。
  • 你的函數應該有一個額外的「這個」參數
  • 創一流宏生成基於宏觀參數的一類,所以它不在-setCompanyName函數定義的。

我找到的javap命令,看看有什麼GEN-類產生非常有用:

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來看看如何管理國家。

+0

你確定吸氣劑不需要嗎?該錯誤明確提及它,並且根據我的經驗,與java bean相關的代碼經常需要它。 –

+0

嗨安德魯,我發佈響應之前測試了代碼,所以是的,我相信你不需要一個getter。 – DanLebrero

+0

好的,很酷,謝謝。 –

0

你不需要另一個函數參數嗎?第一個作爲「this」指針。我現在無法測試,因爲我正在使用手機。