Esta pregunta es casi un duplicado de: Scala can't multiply java Doubles? - se puede ver en my answer así, ya que la idea es similar.
Como Eastsun ya se ha insinuado, la respuesta es un conversión implícita de un java.lang.Integer
(básicamente un sistema encajonado int
primitivo) a una scala.Int
, que es la forma Scala de representar JVM enteros primitivos.
implicit def javaToScalaInt(d: java.lang.Integer) = d.intValue
Y interoperabilidad se ha logrado - cortó el código que has dado debe compilar muy bien! Y el código que usa scala.Int
donde se necesita java.lang.Integer
parece funcionar bien debido al autoboxing. Por lo tanto, las siguientes obras:
def foo(d: java.lang.Integer) = println(d)
val z: scala.Int = 1
foo(z)
También, como michaelkebe Dicho esto, no utilizan el tipo Integer
- que en realidad es la abreviatura de scala.Predef.Integer
ya que es obsoleto y muy probablemente va a ser eliminado en Scala 2.8.
EDIT: Oops ... se olvidó de responder el por qué. El error que obtiene es probablemente que el scala.Predef.Integer
intentó imitar el azúcar sintáctico de Java donde a + "my String"
significa concatenación de cadenas, a
es un int
. Por lo tanto, el método +
en el tipo scala.Predef.Integer
solo hace la concatenación de cadenas (esperando un tipo String
) y no agrega números enteros naturales.
- Flaviu Cipcigan