と の 2 つの Java クラスがLogEntry
ありRecord
ます。
このLogEntry
クラスには、以下に示すメソッドがあります。
public LogEntry setRec(List<Map<String,List<Record>>> rec)
Scalaでは、次のように入れようとしてRecord
いLogEntry
ます:
import scala.collection.JavaConversions._
import collection.mutable._
val log = new LogEntry()
val rec = new Record()
val map:java.util.Map[String, java.util.List[Record]] = HashMap("sessionKey" -> ArrayBuffer(rec))
log.setRec(List(map))
しかし、コンパイルエラーが発生しました:
scala> val map:java.util.Map[String, java.util.List[Record]] = HashMap("sessionKey" -> ArrayBuffer(eventPart))
<console>:14: error: type mismatch;
found : scala.collection.mutable.HashMap[String,scala.collection.mutable.ArrayBuffer[Record]]
required: java.util.Map[String,java.util.List[Record]]
val map:java.util.Map[String, java.util.List[Record]] = HashMap("sessionKey" -> ArrayBuffer(eventPart))
^
Scala コレクションから Java コレクションへの自動規則が失敗したようですが、公式ドキュメントで説明されているように:
mutable.Buffer <=> java.util.List
mutable.Map <=> java.util.Map
scala> val jul: java.util.List[Int] = ArrayBuffer(1, 2, 3)
jul: java.util.List[Int] = [1, 2, 3]
scala> val m: java.util.Map[String, Int] = HashMap("abc" -> 1, "hello" -> 2)
m: java.util.Map[String,Int] = {hello=2, abc=1}
ArrayBuffer
に変換でき、 に変換java.util.List
できHashMap
ますjava.util.Map
。
では、なぜこのエラーが発生したのでしょうか。