在Clojure中使用genclass扩展Java类时如何调用超类?
我想从Clojure调用超类中的一个方法。我正在使用:gen-class
扩展一个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";
}
}
编辑:作为我尝试的链接示例
(ns subclass.core
(:gen-class
:extends Baseclass
:exposes-methods {greet pgreet})
(:import Baseclass))
(defn greet []
(.pgreet (Baseclass.)))
(defn -main [& args])
但是当我打电话(打招呼)时,我发现了错误
IllegalArgumentException No matching field found: pgreet for class Baseclass clojure.lang.Reflector.getInstanceField (Reflector.java:271)
这是调用超级类方法的正确方法吗
更新:明白了。我们创建了一个不同的方法,它将内部调用基类方法。
https://en.wikibooks.org/wiki/Clojure_Programming/Examples/API_Examples/Java_Interaction#genclass
注:链接的答案不是这么说的
# 1 楼答案
这个问题已经被讨论过了
您的示例失败,因为
greet
函数尝试在BaseClass
的实例上调用pgreet
方法。您需要创建gen-class
ed类的实例例如,类似这样的内容: