0

我正在使用 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 启动呢?

Thge 以下不起作用,因为缺少第一个参数。

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

简单地使用空的第一个参数调用函数是一种好习惯吗?

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

或者我应该添加一个我在内部使用的函数(例如addToString)并从将作为方法添加到类文件的函数中调用这个函数?

4

1 回答 1

0

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

也许addToString应该是一个静态方法?

也许你应该做一个add-to-string可以直接在clojure中使用的函数,也可以被addToString方法调用?

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

于 2014-10-19T00:19:04.577 回答