定义用于java的scala function1具有错误的类型

时间:2013-06-07 13:41:50

标签: scala generics

问题可归纳如下:

我有一个类,它定义了几个从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>);

为什么会这样?

1 个答案:

答案 0 :(得分:1)

在Scala中,Double扩展了AnyVal。当您使用此函数时,最近的超类将查找,如果AnyVal,则最近的Java超类是Object。