Ответ 1
Этот вопрос почти дублируется: Scala не может умножить java Doubles? - вы можете посмотреть мой ответ, так как идея схожа.
Как уже отмечалось Eastsun, ответ представляет собой неявное преобразование из java.lang.Integer
(в основном поэтапного примитива int
) в scala.Int
, который является Scala способом представления простых чисел JVM.
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
, поскольку он устарел и, скорее всего, будет удален в Scala 2.8.
EDIT: Ой... забыл ответить на вопрос почему. Вероятно, ошибка, с которой вы столкнулись, scala.Predef.Integer
пыталась имитировать синтаксический сахар Java, где a + "my String"
означает конкатенацию строк, a
- это int
. Поэтому метод +
в типе scala.Predef.Integer
выполняет только конкатенацию строк (ожидая тип String
) и никакого добавления натурального целого.
- Флави Чипчиган