clojure java互操作和接口
我在使用Clojure的Java接口时遇到问题 我有以下类:公共类OpenAccess 它有一个方法:静态连接(字符串url) 其中连接是接口:公共接口连接 在Java中,我会这样做来设置连接:clojure java互操作和接口,clojure,clojure-java-interop,Clojure,Clojure Java Interop,我在使用Clojure的Java接口时遇到问题 我有以下类:公共类OpenAccess 它有一个方法:静态连接(字符串url) 其中连接是接口:公共接口连接 在Java中,我会这样做来设置连接: Connection conn = OpenAccess.connect(url); 我从Clojure尝试了以下方法,但无效: (defn connection [url] (let [oa (access.OpenAccess.) connection (reify access.Co
Connection conn = OpenAccess.connect(url);
我从Clojure尝试了以下方法,但无效:
(defn connection [url]
(let [oa (access.OpenAccess.)
connection (reify access.Connection
.....
(.connect oa connection)))
它错误为“IllegalArgumentException未找到匹配的方法:connect for class access.OpenAccess”
我不知道如何从Clojure正确执行Java接口。看起来像一个静态调用:
(defn connection [url]
(OpenAccess/connect url))
如果需要键入提示,您可以这样使用它:
(let [^Connection conn (connection "http://foo")]
// use your conn
)
您不需要^Connection,但它会告诉编译器conn上方法调用的类型,这将避免反射 通常最好在let绑定中键入hint名称,而不是值,如
(let[^Connection conn(foo…)…)
。大多数情况下,就像这里一样,这并不重要,但特别是如果foo
是一个宏,您的类型提示将被默默忽略,如中所述。