IT干货网

Scala不能乘Java Doubles吗

flyfish 2025年05月04日 编程设计 293 0

在Scala中使用Java类时,我注意到Scala不能乘以Java Double。这是一个例子:

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 
        ^ 

哇!我猜是因为Scala运算符只是方法,所以它试图调用Java Double类的乘法方法(即“34.0。*(2.1)”)。哎呀。有一种简单的方法可以进行此互操作吗?

请您参考如下方法:

我将隐式转换为Scala Double

implicit def javaToScalaDouble(d: java.lang.Double) = d.doubleValue 

现在您的代码可以正常工作了!同样,像 1.2 + x这样的表达式也可以工作。由于自动装箱代码的存在,因此可以进行以下编译,而无需进行隐式转换。
def foo(d: java.lang.Double) = println(d) 
val z: scala.Double = 1.2 
foo(z) 

-Flaviu Cipcigan


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!