在Clojure中调用Java重载方法Path.of时遇类型转换错误如何解决?
解决Clojure中调用Path.of()的重载匹配错误
你遇到的ClassCastException是因为Clojure的方法重载解析逻辑,当仅传入单个String参数时,错误匹配了Path.of(URI)这个重载方法,导致尝试将String强制转换为URI失败。
解决方案1:明确匹配可变参数重载
给Path.of传递第二个参数(空字符串数组),引导Clojure选择正确的重载:
(import '(java.nio.file Path)) (Path/of "~/projects" (into-array String []))
解决方案2:使用Paths.get替代
Paths.get的重载在Clojure中更容易被正确解析,同样可以通过传递空数组匹配目标方法:
(import '(java.nio.file Paths)) (Paths/get "~/projects" (into-array String []))
额外注意:解析shell风格的~路径
Java的Path API不识别shell中的~(用户目录缩写),如果要指向用户目录下的projects文件夹,需要先手动解析用户目录:
(import '(java.nio.file Path)) (def user-home (System/getProperty "user.home")) ;; 传递多个路径片段时,Clojure会自动匹配String+可变参数的重载 (Path/of user-home "projects")
内容的提问来源于stack exchange,提问作者SimpleSample
相关产品推荐
相关产品推荐

