Автобокс Scala и Java Map - PullRequest
       16

Автобокс Scala и Java Map

3 голосов
/ 16 декабря 2010

У меня есть метод Java принимает аргумент типа Map<Long, Foo>. Я пытаюсь написать модульный тест для этого метода в Scala 2.8.1 и передать в буквальном смысле Map[Long, Foo].

Мой код выглядит так:

import collection.JavaConversions._
x.javaMethod(asJavaMap(Map(1L -> new Foo, 2L -> new Foo)))

Компилятор выдает мне следующую ошибку:

error: type mismatch;
found   : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]

Я тоже попробовал с

import collection.JavaConverters._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))

и

import collection.JavaConversions._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))

и получил ошибку:

error: type mismatch;
found   : scala.collection.immutable.Map[scala.Long,Foo]
required: java.util.Map[java.lang.Long,Foo]

Как мне это сделать?

1 Ответ

6 голосов
/ 16 декабря 2010

Ошибка говорит о том, что карту Scala с scala.Long типом ключа нельзя неявно преобразовать в карту Java на основе java.lang.Long:

found   : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]

В качестве обходного пути вы можете указать требуемый тип вручную:1006 *

x.javaMethod(asJavaMap(Map((1:java.lang.Long) -> new Foo, (2:java.lang.Long) -> new Foo)))
...