我正在尝试使用 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[] 的对象。
我已经尝试删除(对象数组)形式 - 但这只会导致 Clojure 尝试调用 get(URI) 方法 - 无论是否有类型提示。
将 nil 作为第二个参数传递给 Paths#get(String, String...) 会调用正确的方法,但 Java 7 会因 NPE 而失败。
我似乎无法在 Clojure 中找到表达 String[] 类型的方法 - 我猜我要么需要这样做,要么向调度系统提供提示。
有什么想法吗?
最佳答案
如您所见,它不需要 Object[],它需要 String[]。 object-array
完全按照它所说的去做:它创建了一个对象数组。如果你想创建一个不同类型的数组,make-array
和 into-array
是你的 friend 。例如这里:
(Paths/get "foo" (into-array String ["bar" "baz"]))
在这种情况下,String
说明符是可选的:如果您省略数组所需的类型,Clojure 将使用第一个对象的类型作为数组的组件类型。
关于java - 从 Clojure 调用可变参数 Java 函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5638541/