Diese Frage ist fast ein Duplikat: Scala can't multiply java Doubles? - Sie auch bei my answer aussehen kann, wie die Idee ähnlich ist.
Eastsun Wie bereits angedeutet, ist die Antwort eine implizite Konvertierung von einem java.lang.Integer
zu einem scala.Int
(im Grunde ein int
primitiver eingerahmt), die die Art und Weise der Scala repräsentierte JVM primitive ganze Zahlen ist.
implicit def javaToScalaInt(d: java.lang.Integer) = d.intValue
Und Interoperabilität wurde erreicht - der Code, den Sie geschnitzt haben, sollte kompilieren, einfach gut! Und Code, der scala.Int
verwendet, wo java.lang.Integer
benötigt wird, scheint wegen Autoboxen gut zu funktionieren. So sind die folgenden Werke:
def foo(d: java.lang.Integer) = println(d)
val z: scala.Int = 1
foo(z)
Auch als michaelkebe sagte, verwenden Sie nicht die Integer
Typ - die für scala.Predef.Integer
eigentlich eine Abkürzung ist, da es veraltet ist und höchstwahrscheinlich wird sich in Scala 2.8 entfernt werden.
EDIT: Hoppla ... vergessen zu beantworten, warum. Der Fehler, den Sie erhalten, ist wahrscheinlich, dass der scala.Predef.Integer
Java-syntaktischen Zucker nachzuahmen versuchte, wobei a + "my String"
String-Verkettung bedeutet, a
ist ein int
. Daher führt die +
-Methode im scala.Predef.Integer
-Typ nur String-Verkettung (erwartet einen String
-Typ) und keine natürliche ganzzahlige Addition.
- Flaviu Cipcigan