2

Spring Bean の初期化を使用して初期化する clojure クラスがあります。

私のセッターメソッドは次のとおりです

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

Beanの初期化は次のとおりです

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

次のエラーが発生します。

Bean クラス [test.Company] の無効なプロパティ 'companyName': Bean プロパティ 'companyName' は書き込み可能でないか、無効なセッター メソッドを持っています。セッターのパラメーターの型は、ゲッターの戻り値の型と一致していますか?

この問題の根本的な原因を知っている人はいますか。

いするさんはじめまして。

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の 2 番目の例を見て、状態を管理する方法を確認することをお勧めします。

于 2012-05-17T14:56:17.543 に答える
0

別の関数パラメーターは必要ありませんか? 1 つ目は「this」ポインターとして機能します。今は携帯電話なのでテストできません。

于 2015-11-22T02:11:59.413 に答える