clojure中调用java工厂方法时出错:找到多个匹配的方法



在本例中-http://jscience.org/api/javax/measure/package-summary.html,当我尝试在clojure中运行时,我遇到了一个错误。

(import 'javax.measure.unit.SI)
(import 'javax.measure.Measure)
(Measure/valueOf 2 SI/KILOGRAM)
;; => More than one matching method found: valueOf
[Thrown class java.lang.IllegalArgumentException]

这附近有什么吗?

更新

实际的java代码是这样的:

public static <Q extends Quantity> Measure<java.lang.Integer, Q> valueOf(
int intValue, Unit<Q> unit) {
return new Integer<Q>(intValue, unit);
}
public static <Q extends Quantity> Measure<java.lang.Float, Q> valueOf(
float floatValue, Unit<Q> unit) {
return new Float<Q>(floatValue, unit);
}

我得到的错误是:

找到多个匹配方法:valueOf[抛出类java.lang.IollegalArgumentException]重新启动:0:[退出]退出到SLIME顶层回溯:0:编译器.java:2360 clojure.lang.Compiler.getMatchingParams1:编译器.java:1555 clojure.lang。编译器$StaticMethodExpr。2:编译器.java:938 clojure.lang。编译器$HostExpr$Parser.parse3:编译器.java:6455 clojure.lang.Compiler.analyzeSeq4:编译器.java:6262 clojure.lang.Compiler.analyze5:编译器.java:6223 clojure.lang.Compiler.analyze6:编译器.java:5618 clojure.lang。编译器$BodyExpr$Parser.parse7:编译器.java:5054 clojure.lang.Compiler$FnMethod.parse8:编译器.java:3674 clojure.lang。编译器$FnExpr.parse9:编译器.java:6453 clojure.lang.Compiler.analyzeSeq

很可能您正在调用一个静态重载方法(即Measure.valueOf(double, Unit)Measure.valueOf(float, Unit))。尝试将您的值强制转换为所需的类型,如下所示(假设您想调用Measure/valueOf(float, Unit):

(Measure/valueOf (float 2) SI/KILOGRAM)

刚刚试用过,效果很好:

(Measure/valueOf (Integer. 2) SI/KILOGRAM)

正如这样:

(Measure/valueOf (cast Long 2) SI/KILOGRAM)

以下是一些基本的铸造示例:

(import 'javax.measure.unit.SI)
(import 'javax.measure.Measure)
; Integer Value
; will call: 
;  public static <Q extends Quantity> Measure<java.lang.Integer, Q> valueOf
(Measure/valueOf (Integer. 2) SI/KILOGRAM)
; Long  value 
; will call: 
;  public static <Q extends Quantity> Measure<java.lang.Long, Q> valueOf
(Measure/valueOf (cast Long 2) SI/KILOGRAM)
; Float value
; will call: 
;  public static <Q extends Quantity> Measure<java.lang.Float, Q> valueOf
(Measure/valueOf (Float. 2.0) SI/KILOGRAM)

最新更新