3

この例では、 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.IllegalArgumentException]

再起動:
 0:[QUIT]SLIMEトップレベルで終了します

バックトレース:
  0:Compiler.java:2360 clojure.lang.Compiler.getMatchingParams
  1:Compiler.java:1555 clojure.lang.Compiler$StaticMethodExpr。
  2:Compiler.java:938 clojure.lang.Compiler $ HostExpr $ Parser.parse
  3:Compiler.java:6455 clojure.lang.Compiler.analyzeSeq
  4:Compiler.java:6262 clojure.lang.Compiler.analyze
  5:Compiler.java:6223 clojure.lang.Compiler.analyze
  6:Compiler.java:5618 clojure.lang.Compiler $ BodyExpr $ Parser.parse
  7:Compiler.java:5054 clojure.lang.Compiler $ FnMethod.parse
  8:Compiler.java:3674 clojure.lang.Compiler $ FnExpr.parse
  9:Compiler.java:6453 clojure.lang.Compiler.analyzeSeq
4

3 に答える 3

2

Measure.valueOf(double, Unit)ほとんどの場合、静的なオーバーロードされたメソッド(つまり、 vs )を呼び出していますMeasure.valueOf(float, Unit)。そのように値を目的のタイプにキャストしてみてください(呼び出したいと仮定してMeasure/valueOf(float, Unit)

(Measure/valueOf (float 2) SI/KILOGRAM)
于 2012-09-25T11:16:57.887 に答える
2

試してみたところ、これは機能します。

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

これがそうであるように:

(Measure/valueOf (cast Long 2) SI/KILOGRAM)
于 2012-09-25T14:51:50.777 に答える
1

ここにいくつかの基本的なキャストの例があります:

(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)
于 2012-09-25T15:03:54.483 に答える