48

I'am wrapping a java lib into clojure, but i have problems dealing with variable length arguments. Say,

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

How could i call this function in clojure?

1

3 Answers 3

66

Since Java varargs are actually arrays, you can call vararg functions in Clojure by passing an array.

You could convert a Clojure seq (maybe by using Clojure's variety of variable argument functions) into an array:

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

or

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

Or make an array and set its indices manually

(TestClass/aStaticFunction (doto (make-array Integer 3)
                              (aset 0 first-element)
                              (aset 1 second-element)
                              (aset 2 third-element)))
Sign up to request clarification or add additional context in comments.

Comments

9

Java variable length arguments actually want an array as input.

So in Clojure the call should be something like:

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

Comments

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

For e.g.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.