我正在使用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 []类型的方法 - 我猜我需要这样做或者为调度系统提供提示。
有什么想法吗?
答案 0 :(得分:16)
正如您所注意到的,它不需要Object [],它需要String []。 object-array
正如它所说的那样:它创建一个对象数组。如果您想创建一个具有不同类型的数组,make-array
和into-array
是您的朋友。例如:
(Paths/get "foo" (into-array String ["bar" "baz"]))
在这种情况下String
说明符是可选的:如果省略数组所需的类型,Clojure使用第一个对象的类型作为数组的组件类型。