如何从clojure调用gen-class方法

时间:2014-10-17 07:16:02

标签: java clojure compilation call gen-class

我使用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)并从将作为方法添加到类文件中的函数调用此函数?

1 个答案:

答案 0 :(得分:0)

想要将相同的代码视为生成的类上的方法,并且作为与所述类分离的函数对我来说似乎有点臭(在代码气味的意义上,这表示设计中的某个地方存在问题)。

也许addToString应该是静态方法?

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

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