如何在Clojure中使用DefineInterface?

如何在Clojure中使用DefineInterface?,clojure,Clojure,Clojure 1.2.0似乎有一个definterface表单,显然是用来创建Java接口的,有些人建议使用它(例如,一个答案)。然而,我似乎找不到任何关于如何使用它的文档或实例。我是不是找错地方了,或者它实际上是一个不应该使用的早期功能?我对演示definterface功能的文档或示例感兴趣。请查看gen interface的文档 (definterface Foo [^int foo [x ^String y]] [^void bar [^ints is]]) 大致形式如下:

Clojure 1.2.0似乎有一个
definterface
表单,显然是用来创建Java接口的,有些人建议使用它(例如,一个答案)。然而,我似乎找不到任何关于如何使用它的文档或实例。我是不是找错地方了,或者它实际上是一个不应该使用的早期功能?我对演示
definterface

功能的文档或示例感兴趣。请查看
gen interface
的文档

(definterface Foo
  [^int foo [x ^String y]]
  [^void bar [^ints is]])
大致形式如下:

编辑:你说得对。该接口比
gen接口
更接近
defprotocol
的接口

(definterface Foo
  [^int foo [x ^String y]]
  [^void bar [^ints is]])

你应该看一下协议。对于你所寻找的东西来说,这些可能更好。实际上,definterface似乎在扩展到gen接口形式之前对参数进行了重要的处理。首先,它从元数据标签中获取数据类型。这还不完全,但我会将其标记为正确答案。有一件事让我非常困惑,那就是它失败了:(ns测试接口(:import java.io.File))(definterface Foo[^void Foo[^File f]])当我试图基于这段代码运行测试时,我得到了关于“java.lang.ClassNotFoundException:java.lang.File”的错误。如果我将完整路径java.io.File放在类型提示中,它会工作。您必须限定所有类名。这是非常不幸的,但是
gen接口
(以及
gen类
btw)期望
java.lang
作为非限定名称上的包。