我使用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
)并从将作为方法添加到类文件中的函数调用此函数?
答案 0 :(得分:0)
想要将相同的代码视为生成的类上的方法,并且作为与所述类分离的函数对我来说似乎有点臭(在代码气味的意义上,这表示设计中的某个地方存在问题)。
也许addToString
应该是静态方法?
也许您应该创建一个add-to-string
函数,可以直接在clojure中使用,也可以通过addToString
方法调用?
在我们知道最佳答案之前,我们需要了解更多有关您的大型设计的信息,但我怀疑它是其中之一。