Scala autoboxing和Java Map

Ral*_*lph 3 java autoboxing scala scala-java-interop

我有一个Java方法接受类型的参数Map<Long, Foo>.我试图在Scala 2.8.1中为该方法编写单元测试并传入一个文字Map[Long, Foo].

我的代码看起来像这样:

import collection.JavaConversions._
x.javaMethod(asJavaMap(Map(1L -> new Foo, 2L -> new Foo)))
Run Code Online (Sandbox Code Playgroud)

编译器给我以下错误:

error: type mismatch;
found   : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Run Code Online (Sandbox Code Playgroud)

我也试过了

import collection.JavaConverters._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
Run Code Online (Sandbox Code Playgroud)

import collection.JavaConversions._
x.javaMethod(Map(1L -> new Foo, 2L -> new Foo))
Run Code Online (Sandbox Code Playgroud)

并得到错误:

error: type mismatch;
found   : scala.collection.immutable.Map[scala.Long,Foo]
required: java.util.Map[java.lang.Long,Foo]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Vas*_*iuk 6

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

found   : scala.collection.immutable.Map[scala.Long,Foo]
required: scala.collection.Map[java.lang.Long,Foo]
Run Code Online (Sandbox Code Playgroud)

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

x.javaMethod(asJavaMap(Map((1:java.lang.Long) -> new Foo, (2:java.lang.Long) -> new Foo)))
Run Code Online (Sandbox Code Playgroud)