我想在 clojure 中定义一个 java 接口 - (以及实现它) - 我知道实现可以通过代理和 gen-class 完成,但总是假设接口已经定义。
问问题
680 次
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 回答