clojure 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

我在使用Clojure的Java接口时遇到问题

我有以下类:公共类OpenAccess

它有一个方法:静态连接(字符串url)

其中连接是接口:公共接口连接

在Java中,我会这样做来设置连接:

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
是一个宏,您的类型提示将被默默忽略,如中所述。