To pytanie jest prawie duplikat: Scala can't multiply java Doubles? - można patrzeć na my answer jak dobrze, że idea jest podobna.
Jak Eastsun już zasugerował, że odpowiedź jest niejawna konwersja z java.lang.Integer
(w zasadzie zapakowane int
prymitywna) do scala.Int
, który to sposób Scala reprezentowania JVM prymitywne całkowitymi.
Osiągnięto interoperacyjność - podany kod powinien zostać skompilowany dobrze! Kod, który używa scala.Int
, gdzie java.lang.Integer
jest potrzebny, wydaje się działać dobrze z powodu autoboxingu. Więc następujące prace:
def foo(d: java.lang.Integer) = println(d)
val z: scala.Int = 1
foo(z)
Ponadto, jak michaelkebe powiedział, nie używaj typ Integer
- co jest właściwie skrótem scala.Predef.Integer
jak to jest przestarzałe i najprawdopodobniej zostanie usunięta w Scala 2.8.
EDIT: Ups ... zapomniałem odpowiedzieć na pytanie dlaczego. Błąd, który otrzymałeś, prawdopodobnie spowodował, że scala.Predef.Integer
próbował naśladować syntaktyczny cukier Javy, gdzie a + "my String"
oznacza konkatenację ciągów, a
to int
. Dlatego metoda +
w typie scala.Predef.Integer
wykonuje tylko konkatenację ciągów (oczekiwanie typu String
) i nie dodaje naturalnej liczby całkowitej.
- Flaviu Cipcigan