从Clojure调用可变参数Java函数时出现问题

| 我正在使用JDK 7中的Java NIO.2 API。 我特别要调用该方法:
Paths#get(String first, String... more)
这是一个静态方法,它至少接收一个字符串,并返回与其对应的Path对象。有一个重载形式:
Paths#get(URI uri)
但是,我似乎无法从Clojure调用top方法。我似乎能得到的最接近的是:
(Paths/get ^String dir-fq (object-array 0))
失败与:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
如您所料。毕竟,我们正在将Object []传递给期望String []的对象。 我尝试删除(object-array)形式-但这只会导致Clojure尝试调用get(URI)方法-无论是否带有类型提示。 将nil作为第二个参数传递给Paths#get(String,String ...)会导致调用正确的方法,但是Java 7然后由于NPE失败。 我似乎在Clojure中找不到表达String []类型的方法-我猜我要么需要这样做,要么向调度系统提供提示。 有任何想法吗?     
已邀请:
正如您所注意到的,它不需要Object [],而需要String []。
object-array
完全按照其说的去做:它使一个对象阵列。如果要创建其他类型的数组,则
make-array
into-array
是您的朋友。例如这里:
(Paths/get \"foo\" (into-array String [\"bar\" \"baz\"]))
在这种情况下,“ 8”说明符是可选的:如果省略了数组的所需类型,Clojure将使用第一个对象的类型作为数组的组件类型。     

要回复问题请先登录注册