3

type の引数を取る 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 に答える