3

我有一个 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]

我该怎么做呢?

4

1 回答 1

6

该错误表明具有scala.Long键类型的 Scala 映射不能基于以下内容隐式转换为 Java 映射java.lang.Long

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

作为一种解决方法,您可以手动指定所需的类型:

x.javaMethod(asJavaMap(Map((1:java.lang.Long) -> new Foo, (2:java.lang.Long) -> new Foo)))
于 2010-12-16T16:11:11.903 回答