Как конфертировать из java.util.Map в карту Scala
Java API возвращаетjava.util.Map<java.lang.String,java.lang.Boolean>
;. Я хотел бы поместить это вMap[String,Boolean]
Итак, представьте, что мы имеем:
<code>var scalaMap : Map[String,Boolean] = Map.empty val javaMap = new JavaClass().map() // Returns java.util.Map<java.lang.String,java.lang.Boolean> </code>
Вы не можете сделатьMap.empty ++ javaMap
, потому что метод ++ не знает о картах Java. Я старался:
<code>scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] { override def underlying = javaMap } </code>
а также:
<code>scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] { override def underlying = javaMap } </code>
Они оба не компилируются из-за обобщений -java.lang.String
это не то же самое, что Scala String.
Есть ли хороший способ сделать это, кроме копирования карты вручную?
РЕДАКТИРОВАТЬ: Спасибо, все хорошие ответы, я многому научился у всех. Однако я допустил ошибку, разместив здесь более простую проблему, чем та, которая у меня есть на самом деле. Итак, если вы позволите мне, я обобщу вопрос: что API на самом деле возвращает
<code>java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>> </code>
И мне нужно переместить это в Map [String, Map [SomeJavaEnum, String]]
Возможно, это не кажется слишком сложным, но добавляет дополнительный уровень стирания типов, и единственный способ, с помощью которого я переместил это на карту Scala, - это его глубокое копирование (используя некоторые методы, которые вы предложили ниже) , Есть какие-нибудь намеки? Я как бы решил свою проблему, определив неявное преобразование для моих точных типов, так что, по крайней мере, уродство скрыто в его собственной черте, но все еще кажется немного неуклюжимым глубоким копированием партии.