我有兩個Java類:LogEntry
和Record
。爲什麼Java和Scala集合之間的自動轉換失敗?
的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))
^
似乎自動約定從斯卡拉收集到Java集合失敗,但作爲the official doc描述:
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
。
那麼,爲什麼會發生此錯誤?
@sschaef感謝您的耐心編輯,我會更加關注未來的格式和語法。 – DiveInto