在Clojure中实现具有可变数量的args的Java接口方法

时间:2012-02-01 21:41:33

标签: interface proxy clojure

我知道我在Clojure中使用代理实现了一个Java接口:

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

请注意,接口方法中的四个参数 startElement 有四个参数 [uri local qname atts]

假设Java接口中的方法具有可变数量的args,如下所示:

List<Task> getTasks(Object... args);

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

1 个答案:

答案 0 :(得分:3)

我不是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)))