2009-10-14 166 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 
相關問題