5

我正在尝试在 Clojure 中实现以下 Java 接口:

package quickfix;

public interface MessageFactory {
    Message create(String beginString, String msgType);
    Group create(String beginString, String msgType, int correspondingFieldID);
}

以下 Clojure 代码是我这样做的尝试:

(defn -create-message-factory 
  []
  (reify quickfix.MessageFactory
    (create [beginString msgType]
      nil)
    (create [beginString msgType correspondingFieldID]
      nil)))

这无法编译并出现错误:

java.lang.IllegalArgumentException:无法定义不在接口中的方法:创建

文档建议重载接口方法是可以的,只要在这种情况下arity不同:

如果一个方法在协议/接口中被重载,则必须提供多个独立的方法定义。如果在接口中以相同的数量重载,则必须指定完整的提示以消除歧义-缺少提示意味着 Object.

我怎样才能得到这个工作?

4

1 回答 1

9

你缺少一个参数。实现的每个方法的第一个参数reify是对象本身(如defrecord/的情况deftype)。所以,试试这个:

(defn -create-message-factory 
  []
  (reify quickfix.MessageFactory
    (create [this beginString msgType]
      nil)
    (create [this beginString msgType correspondingFieldID]
      nil)))
于 2014-01-08T15:54:17.823 回答