Scala不能乘以java双打?

DrG*_*ary 6 scala

在Scala中使用Java类时,我注意到Scala不能将Java双打倍增.这是一个例子:

scala> val x:java.lang.Double = new java.lang.Double(34.0)
x: java.lang.Double = 34.0

scala> val y:java.lang.Double = new java.lang.Double(2.1) 
y: java.lang.Double = 2.1

scala> x*y
<console>:7: error: value * is not a member of java.lang.Double
       x*y
        ^
Run Code Online (Sandbox Code Playgroud)

哇!我想这是因为Scala运算符只是方法,所以它试图调用Java Double类的multiply方法(即"34.0.*(2.1)").哎呀.有没有一种简单的方法来实现这种互操作?

Fla*_*gan 9

我将定义一个隐式转换为Scala Double

implicit def javaToScalaDouble(d: java.lang.Double) = d.doubleValue
Run Code Online (Sandbox Code Playgroud)

现在你的代码有效!类似的表达也像1.2 + x工作一样.并且由于自动装箱代码如下所示编译而不需要隐式转换.

def foo(d: java.lang.Double) = println(d)
val z: scala.Double = 1.2
foo(z)
Run Code Online (Sandbox Code Playgroud)

- Flaviu Cipcigan