问题可归纳如下:
我有一个类,它定义了几个从java调用的方法。其中一个有如下签名:
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>);
为什么会这样?
答案 0 :(得分:1)
在Scala中,Double扩展了AnyVal。当您使用此函数时,最近的超类将查找,如果AnyVal,则最近的Java超类是Object。