3

この問題は次のように要約できます。

Java から呼び出されるいくつかのメソッドを定義するクラスがあります。それらの1つは次のような署名を持っています:

import java.lang.{Double => JDouble}

def compute(x: Double, fun: Function1[Double,Double]) = ???

また

def compute(x: Double, fun: Double => Double) = ???

それらのいずれかで javap を使用すると、次のようになります。

Double compute(double, scala.Function1<java.lang.Object, java.lang.Object>)

次のエイリアシングを使用する場合

 import java.lang.{Double => JDouble}
 def compute(x: Double, fun: JDouble => JDouble) = 

それはjavapで正しいように見えます

public Double compute( double, scala.Function1<java.lang.Double, java.lang.Double>);

どうしてこれなの?

4

1 に答える 1

1

Scala では、Double は AnyVal を拡張します。この関数を javap すると、最も近いスーパー クラスが見つかります。AnyVal の場合、最も近い Java スーパー クラスは Object です。

于 2014-01-10T16:18:00.613 に答える