实现 returns double 的方法:不匹配

Implement methods which returns double : mismatch

我在尝试将 clojure 函数包装到 Java 接口时遇到了问题。 这是示例:

(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
  DistanceMeasure
  (compute ^double [this ^doubles a ^doubles b] (double (f a b))))

(defn ->distance-measure
  ^DistanceMeasure
  [^clojure.lang.IFn f]
  (ClojureDistanceMeasure. f))

DistanceMeasure(apache 数学)中的 compute 方法应该是 return。但是,无论我尝试哪种类型的提示(在带有 ^ 的 args 之前,包装成一个提示的匿名函数),程序都拒绝编译:mismatched return type, expected:double, had : java.lang.Object .

这是一个已知问题吗?有没有办法覆盖它(即使使用 Java 代码)?

我什至试过愚蠢的代码,也没用

(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
  DistanceMeasure
  (compute [this ^doubles a ^doubles b] (let [result (f a b)] (double (+ result 0.0)))))

这很奇怪,因为它适用于其他类似的界面。

谢谢

这解决了问题:

(deftype ClojureDistanceMeasure [^clojure.lang.IFn f]
  DistanceMeasure
  (compute ^double [this a b] (f ^doubles a ^doubles b)))

同样没有内部类型提示:我必须删除参数提示并且它有效。不知道是不是clojure遗漏了部分issue tough