首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从clojure调用gen-class方法

如何从clojure调用gen-class方法
EN

Stack Overflow用户
提问于 2014-10-17 15:16:02
回答 1查看 398关注 0票数 0

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

代码语言:javascript
复制
(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上下文中调用该方法可以很好地工作。

代码语言:javascript
复制
(def var (com.stackoverflow.clojure.TestGenClass.))
(.addToString var "Aus Clojure heraus (Methode 1)." " :ENDE")
(. var addToString "Aus Clojure heraus (Methode 2)." " :ENDE")

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

下面的方法不起作用,因为缺少第一个参数。

代码语言:javascript
复制
(java-addToString "TexT" " :END")

简单地调用第一个参数为空的函数是一种好的做法吗?

代码语言:javascript
复制
(java-addToString "" "TexT" " :END")

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

EN

回答 1

Stack Overflow用户

发布于 2014-10-19 08:19:05

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26419830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档