スーパークラスのメソッドをClojureから呼び出したいとします。私は:gen-class
を使ってJavaクラスを拡張しています。Clojureでgenclassを使用してJavaクラスを拡張するときにスーパークラスを呼び出す方法は?
(ns subclass.core
(:gen-class
:extends Baseclass))
(defn greet []
"Hello from core") ; how to call super.greet()?
(defn -main [& args]
(greet))
Javaの基底クラス
public class Baseclass {
public String greet() {
return "Hello from Baseclass";
}
}
編集:私は、私はエラー
IllegalArgumentException No matching field found: pgreet for class Baseclass clojure.lang.Reflector.getInstanceField (Reflector.java:271)
を取得しています
(ns subclass.core
(:gen-class
:extends Baseclass
:exposes-methods {greet pgreet})
(:import Baseclass))
(defn greet []
(.pgreet (Baseclass.)))
(defn -main [& args])
を試してみました。しかし、私が呼び出したときに(あいさつ)リンクされている例として、
これはスーパークラスメソッドを呼び出す正しい方法ですか?
更新:入手しました。私たちは、基本クラスのメソッドを呼び出す別のメソッドを作成します。 https://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples/Java_Interaction#genclass
NB:それはリンクされた答えが言うものではありません。
あなたのコードが重複して答えに従っていません。 '(.pgreet this)'の代わりに '(.pgreet(BaseClass。))'を使用します。 *巨大な違いがあります。 –
'this' argとは何ですか?クラス「Baseclass」の対象ではありませんか?そうでなければ、 '(grep greet [this](.pgreet this))' 'greet'を呼び出すには? 'this'' argのために何を渡しますか? – boring
いいえ、あなたが他の質問で与えられた答えに従えば、 'this'は' BaseClass'クラスの* subclass *のオブジェクトになります。 'BaseClass'は' pgreet'メソッドを持っていません - それは 'pgreet'メソッドを持つ' gen-class'です。 –