繁体   English   中英

如何从Clojure调用Gen类方法

[英]How to call a gen-class method from clojure

我正在使用gen-class从我的Clojure代码生成Java类。 为了使gen-class起作用,我需要向将添加到该类的所有方法(此处称为this )中添加一个附加的第一个参数。

(ns com.stackoverflow.clojure.testGenClass
  (:gen-class
     :name com.stackoverflow.clojure.TestGenClass
     :implements [com.stackoverflow.clojure.TestGenClassInterface]
     :prefix "java-"))

(def ^:private pre "START: ")

(defn java-addToString [this text post]
  (str pre text post))

编译后,在Java上下文中调用该方法可以正常工作。

(def var (com.stackoverflow.clojure.TestGenClass.))
(.addToString var "Aus Clojure heraus (Methode 1)." " :ENDE")
(. var addToString "Aus Clojure heraus (Methode 2)." " :ENDE")

但是,如何直接从Clojure启动它?

由于缺少第一个参数,因此无法进行跟随。

(java-addToString "TexT" " :END")

优良作法是简单地使用空的第一个参数调用该函数吗?

(java-addToString "" "TexT" " :END")

还是应该添加一个内部使用的函数(例如addToString ),然后从将作为方法添加到类文件的函数中调用此函数?

想要将相同的代码当作生成类上的方法以及与所述类分开的函数来对待,这在我看来有点臭(在代码气味的意义上,这表明设计中某处存在问题)。

也许addToString应该是静态方法?

也许您应该创建一个可以直接在clojure中使用并且还可以通过addToString方法调用的add-to-string函数?

在知道最佳答案之前,我们需要了解更多有关您较大的设计的信息,但我怀疑这是其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM