Этот вопрос почти дубликат: Scala can't multiply java Doubles? - вы можете посмотреть на my answer, а также, как идея аналогична.
В Eastsun уже намекает, ответ является неявного преобразования из java.lang.Integer
(в основном в штучном упаковке int
примитивные) к scala.Int
, который является Скала способом представления 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
) и не добавляя натуральное целое число.
- Flaviu Cipcigan