gpt4 book ai didi

Clojure 使用重载方法具体化 Java 接口(interface)

转载 作者:行者123 更新时间:2023-12-02 16:10:15 25 4
gpt4 key购买 nike

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

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: Can't define method not in interfaces: create

documentation建议重载接口(interface)方法是可以的,只要数量与本例中不同即可:

If a method is overloaded in a protocol/interface, multiple independent method definitions must be supplied. If overloaded with same arity in an interface you must specify complete hints to disambiguate - a missing hint implies Object.

我怎样才能让它工作?

最佳答案

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

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

关于Clojure 使用重载方法具体化 Java 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com