我正在使用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
是你的朋友。例如:
(Paths/get "foo" (into-array String ["bar" "baz"]))
在这种情况下,String
说明符是可选的:如果你省略了数组所需的类型,Clojure将使用第一个对象的类型作为数组的组件类型。