java - Clojure:如何将 Varargs 扩展为 Java 方法的列表

标签 java clojure variadic-functions

我正在开发一个 clojure 函数,它接受可变数量的参数,并将这些参数传递给 java 方法调用

(defn foo [var1 var2 & vars]
    (let [bar (.foo var1)]
        (.gaz bar var2 vars)))

当 vars 为空时,这有效,但是当我在 vars 中放入一些东西时,我得到

java.lang.ClassCastException: Cannot cast clojure.lang.ArraySeq to [Ljava.lang.Object;

似乎变量没有被拼接/插入到方法调用的变量参数列表中。我怎样才能做到这一点?我想用它作为两者

(foo a b)

(foo a b c d e f)

并让它调用

(.gaz bar b c d e f) ;; <- note the list is embedded

最佳答案

请注意,这将返回您的错误消息所要求的类型:

user> (into-array Object [1 2 3])
#<Object[] [Ljava.lang.Object;@571bc284>

从上下文来看,我认为 .gaz 可能是可变参数。如果是这样,您所需要的只是以下内容:

(.gaz bar var2(数组对象变量))

关于java - Clojure:如何将 Varargs 扩展为 Java 方法的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955489/

相关文章:

java - 合并两个已排序的用户输入数组时出现问题

clojure - 显示为文本字段的 Reagent-Forms 单选按钮

Java varargs 方法参数列表与数组

java - 从 Java 到 MySQL 的访问被拒绝错误

java - Google 应用程序引擎 java.lang.IllegalArgumentException : the Java7 runtime is not supported anymore

java - LinkedList 在 add() 上产生巨大的延迟

clojure - `require`、 `import` 和 `use` 之间有什么区别?

clojure - 在 Reagent/Clojurescript 中保持客户端状态最新

c++ - Mac 上的 vsnprintf() 给出 EXC_BAD_ACCESS?

c++ - 重复使用可变参数函数参数不起作用