【问题标题】:clojure java interop and interfacesclojure java互操作和接口
【发布时间】:2014-04-30 02:21:02
【问题描述】:

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

我有以下课程:公开课 OpenAccess

其中有一个方法:static Connection connect(String url)

其中 Connection 是一个接口:公共接口 Connection

在 Java 中,我会这样做来建立连接:

Connection conn = OpenAccess.connect(url);

我从 Clojure 尝试了以下操作,但它不起作用:

(defn connection [url]
  (let [oa (access.OpenAccess.)
    connection (reify access.Connection
             .....
(.connect oa connection)))

“IllegalArgumentException 未找到匹配方法:连接以获取类 access.OpenAccess”的错误

我不知道如何从 Clojure 正确执行 Java 接口。

【问题讨论】:

    标签: clojure clojure-java-interop


    【解决方案1】:

    看起来像一个静态调用:

    (defn connection [url]
      (OpenAccess/connect url))
    

    如果你需要输入提示,你可以这样使用它:

    (let [^Connection conn (connection "http://foo")]
      // use your conn 
      )
    

    您不需要 ^Connection,但它会告诉编译器 conn 上的方法调用的类型,这将避免反射。

    【讨论】:

    • 通常最好在 let-binding 中键入 names,而不是值,例如 (let [^Connection conn (foo ...)] ...)。大多数时候,就像这里一样,这并不重要,但特别是如果foo 是一个宏,你的类型提示将被默默地忽略,正如dev.clojure.org/jira/browse/CLJ-865 中所讨论的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2012-08-09
    • 2014-03-31
    相关资源
    最近更新 更多