-->

如何处理Java可变长度参数Clojure中?(How to handle java variabl

2019-06-17 14:00发布

我'包裹一个java lib放到Clojure的,但我有处理可变长度参数问题。 说,

TestClass.aStaticFunction(Integer... intList){/*....*/}

我怎么能叫Clojure中的这个功能呢?

Answer 1:

由于Java可变参数是实际数组 ,你可以通过一个数组叫可变参数Clojure中的功能。

你可以转换一个Clojure的序列(可能通过使用Clojure的各种变量参数函数)到一个数组:

 (TestClass/aStaticFunction (into-array Integer [(int 1),(int 2)]))

要么

(defn a-static-function-wrapper [& args]
  (TestClass/aStaticFunction (into-array Integer args))

或使一个数组,并手动设置其指数

(TestClass/aStaticFunction (doto (make-array Integer 3)
                              (aset 0 first-element)
                              (aset 1 second-element)
                              (aset 2 third-element)))


Answer 2:

爪哇可变长度参数需要的是一个数组作为输入。

因此,在Clojure的通话应该是这样的:

(TestClass/aStaticFunction (into-array Integer some-sequence-of-integers))


Answer 3:

(TestClass/aStaticFunction (to-array '(1 2 3 4 5)))

对于如

(java.util.Arrays/asList (to-array '(1 2 3 4 5)))


文章来源: How to handle java variable length arguments in clojure?