interface - 在 Clojure 中实现一个带有可变数量 args 的 Java 接口(interface)方法

标签 interface proxy clojure

我知道我使用这样的代理在 Clojure 中实现了一个 Java 接口(interface):

(def print-element-handler
  (proxy [DefaultHandler] []
    (startElement [uri local qname atts]
      (println (format "Saw element: %s" qname)))))

请注意,接口(interface)方法 startElement 中的四个 args 有四个 args,[uri local qname atts]。

假设 Java 接口(interface)中的方法具有可变数量的参数,如下所示:
List<Task> getTasks(Object... args);

我在相应的 Clojure 函数中为 arg 列表放了什么?

最佳答案

我不能 100% 确定,因为我目前无法对其进行测试,但我相信答案是您只有一个数组参数。我知道一个事实,当您使用 varags 调用 Java 方法时,您必须在传递 Clojure 集合之前将其转换为数组。我想这里没有什么不同。

例如,这里是 format 的来源:

(defn format
  "Formats a string using java.lang.String.format,
   see java.util.Formatter for format string syntax"
  {:tag String
   :added "1.0"}
  [fmt & args]
  (String/format fmt (to-array args)))

关于interface - 在 Clojure 中实现一个带有可变数量 args 的 Java 接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103777/

相关文章:

android - 适用于 Android 的 SOCKet 安全 (SOCKS) 服务器

python - 通过 Python Requests 模块发出 HTTP 请求不能通过 curl 的代理工作?为什么?

c# - 在这种情况下如何返回 List<MyInterface>

dictionary - 接受多种接口(interface)类型的数据类型

c++ - 单例和接口(interface)实现

algorithm - 如何在 Clojure 中删除向量中的顺序匹配项?

java - 无法在 Clojure 中调用 createTempDirectory

java - 强制执行静态方法所需的设计模式

proxy - DD-WRT可以安装代理服务器吗?

函数式编程公理