3

问题可以总结如下:

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

为什么是这样?

4

1 回答 1

1

在 Scala Double 中扩展 AnyVal。当你 javap 这个函数时,最近的超类会找到,并且在 AnyVal 的情况下,最近的 Java 超类是 Object。

于 2014-01-10T16:18:00.613 回答