1

我想在 clojure 中定义一个 java 接口 - (以及实现它) - 我知道实现可以通过代理和 gen-class 完成,但总是假设接口已经定义。

4

2 回答 2

5

clojure.core/definterface您可以使用和生成 Java 接口clojure.core/gen-interface。(definterface扩展为对 的调用gen-interface。)

(ns demo.api)

(definterface Store
  (^demo.api.Store buy [])
  (^demo.api.Store buy [^int q])
  (^demo.api.Store sell [])
  (^int getQty []))

;; or

(gen-interface
 :name demo.api.Store
 :methods [[buy [] demo.api.Store]
           [buy [int] demo.api.Store]
           [sell [] demo.api.Store]
           [getQty [] int]])

取自这篇博文

如果您想要一般意义上的“接口”,请查看Clojure Protocols

于 2013-09-21T19:27:28.427 回答
0

是的,您可以definterface

 (definterface MyInterface
  (^int method1 [x])
  (^Bar method2 [^Baz b ^Quux q]))

不过,与上面链接的某些示例不同,您现在可以在 Clojure 中输入提示等^ints^doubles

docstring但是请注意,目前没有办法definterface

除非您需要 Java 兼容性,否则您应该查看 clojureprotocols

如果这是关于将 Clojure 代码暴露给 Java,似乎最好的方法是用 Java 编写接口并在 Clojure 中实现它,如https://github.com/puredanger/clojure-from-java所示。

于 2019-09-11T21:38:07.817 回答