我正在尝试将一些 Java 代码移植到 Clojure,但遇到了无法解决的情况。
通常,当您想调用带有可变长度参数的 Java 构造函数或方法时,您可以执行以下操作
(Fields. (into-array Comparable ["predict", "other"]))
但是,我发现了一个不起作用的特殊示例:
(Fields. (into-array Comparable ["predict", Double]))
尽管这在 Java 中似乎可行(见下文),但上面的代码给出了以下错误:
IllegalArgumentException array element type mismatch java.lang.reflect.Array.set (Array.java:-2)
我尝试了几种变体,但似乎没有任何效果。我尝试移植的 Java 代码(以及出现问题的特定行)在这里https://github.com/Cascading/pattern/blob/wip-1.0/pattern-examples/src/main/java/cascading/pattern/ Main.java#L76
new Fields( "predict", Double.class )
(Fields 的构造函数签名是 Fields(Comparable... fields) http://docs.cascading.org/cascading/2.1/javadoc/cascading/tuple/Fields.html#Fields(java.lang.Comparable...)
我在 Clojure repl 中尝试了以下示例:
(into-array Comparable [(type Double)])
(into-array Comparable [Double/TYPE])
(into-array Comparable [Double])
=>
IllegalArgumentException array element type mismatch java.lang.reflect.Array.set (Array.java:-2)