我使用gen-class从我的Clojure代码生成Java-class。为了使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),并从将作为方法添加到类文件中的函数中调用此函数?
发布于 2014-10-19 08:19:05
想要将相同的代码作为生成的类上的方法,并作为与所述类分离的函数,对我来说似乎有点难闻(从代码气味的意义上讲,这表明设计中的某个地方存在问题)。
也许addToString应该是一个静态方法?
也许您应该创建一个可以直接在clojure中使用,也可以由addToString方法调用的add-to-string函数?
在我们知道最佳答案之前,我们需要更多地了解你的更大的设计,但我怀疑它就是其中之一。
https://stackoverflow.com/questions/26419830
复制相似问题