如何在Clojure中调用Java可变参数方法?into-array使用遇问题
解决Clojure调用Paths/get时的ClassCastException问题
你遇到的错误根源在于Paths.get有两个重载方法:
Paths.get(URI uri)Paths.get(String first, String... more)
当你直接传递into-array生成的String数组时,Clojure会把这个数组当作单个参数,匹配到了接受URI的重载方法,自然抛出类型转换异常——String数组无法转成URI类型。
正确的实现方式有三种:
直接传递多个字符串参数(Clojure会自动处理可变参数,无需手动转数组):
(java.nio.file.Paths/get "myfolder" "aaa.txt")用
apply把数组元素展开为方法的多个参数:(apply java.nio.file.Paths/get (into-array ["myfolder" "aaa.txt"]))手动拆分参数,第一个元素作为固定参数,剩余部分转成数组作为可变参数:
(java.nio.file.Paths/get "myfolder" (into-array ["aaa.txt"]))
其中第一种写法最简洁,除非需要动态生成路径片段,否则优先直接传多个字符串即可。
内容的提问来源于stack exchange,提问作者Don Tomato
相关产品推荐
相关产品推荐

