2009-10-14 74 views

回答

19

这个问题几乎是一个重复:Scala can't multiply java Doubles? - 你可以看看my answer为好,因为这个想法是相似的。

作为Eastsun已经暗示,答案是从java.lang.Integer一个隐式转换(基本上是盒装int原语)到scala.Int,它是代表原始JVM整数Scala的方式。

implicit def javaToScalaInt(d: java.lang.Integer) = d.intValue 

而且互操作性已经实现了 - 您所编写的代码应该编译得很好!而使用scala.Int的代码,其中java.lang.Integer需要似乎工作得很好,因为自动装箱。所以下面的工作:

def foo(d: java.lang.Integer) = println(d) 
val z: scala.Int = 1 
foo(z) 

而且,michaelkebe说,不使用Integer类型 - 这实际上是scala.Predef.Integer速记,因为它已被弃用,最有可能会在斯卡拉2.8被删除。

编辑:糟糕...忘了回答原因。您得到的错误可能是scala.Predef.Integer试图模仿Java的语法糖,其中a + "my String"表示字符串连接,aint。因此,scala.Predef.Integer类型中的+方法只执行字符串连接(期望String类型)并且没有自然整数加法。

- Flaviu Cipcigan

0

首先您应该使用java.lang.Integer而不是Integer

目前我不知道为什么发生错误。

ajava.lang.Integer的一个实例,并且此类型没有名为+的方法。此外,不存在向Int的隐式转换。

为了解决这个问题,你可以试试这个:

 
scala> val a: java.lang.Integer = 1 
a: java.lang.Integer = 1 

scala> val b: java.lang.Integer = a.intValue + 1 
b: java.lang.Integer = 2 
2
Welcome to Scala version 2.7.3.final (Java HotSpot(TM) Client VM, Java 1.6.0_16). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> implicit def javaIntToScala(n: java.lang.Integer) = n.intValue 

javaIntToScala: (java.lang.Integer)Int 

scala> val a: java.lang.Integer = 1 

a: java.lang.Integer = 1 

scala> val b: java.lang.Integer = a + 1 

b: java.lang.Integer = 2