[英]Conversion of Scala map containing Boolean to Java map containing java.lang.Boolean
我想將具有布爾值的scala映射轉換為具有java.lang.Boolean值的Java映射(以實現互操作性)。
import scala.collection.JavaConversions._
val a = Map[Int, Boolean]( (1, true), (2, false) )
val b : java.util.Map[Int, java.lang.Boolean] = a
失敗:
error: type mismatch;
found : scala.collection.immutable.Map[Int,scala.Boolean]
required: java.util.Map[Int,java.lang.Boolean]
val b : java.util.Map[Int, java.lang.Boolean] = a
JavaConversions隱式轉換可以與參數化為相同類型的容器一起愉快地工作,但是不知道Boolean和java.lang.Boolean之間的轉換。
我可以使用JavaConversions魔術來進行此轉換,還是可以在不使用該包中隱式轉換的情況下進行簡潔的語法轉換?
盡管JavaConversions
會將Scala Map轉換為java.util.Map
,並且Scala隱式將scala.Boolean
轉換為java.lang.Boolean
,但是Scala不會執行兩次隱式轉換來獲取所需的類型。
Boolean
提供了用於顯式轉換的box
方法。
val b: java.util.Map[Int, java.lang.Boolean] = a.mapValues(Boolean.box)
如果您經常在代碼中執行此操作,則可以為所有Map[T, Boolean]
定義自己的隱式轉換。
import scala.collection.JavaConversions._
implicit def boolMap2Java[T](m: Map[T, Boolean]):
java.util.Map[T, java.lang.Boolean] = m.mapValues(Boolean.box)
val b: java.util.Map[Int, java.lang.Boolean] = a
scala.collection.JavaConversions
不會幫助您將scala.Boolean
為java.lang.Boolean
問題。 但是,使用boolean2Boolean
方法,可以scala.Predef
:
val a = Map[Int, Boolean](1 -> true, 2 -> false)
val b: java.util.Map[Int, java.lang.Boolean] = a.mapValues(boolean2Boolean)
或者,您可以使用Java的Boolean(boolean value)
構造函數:
val a = Map[Int, Boolean](1 -> true, 2 -> false)
val b: java.util.Map[Int, java.lang.Boolean] =
a.mapValues(new java.lang.Boolean(_))
或者,您可以只聲明第一個映射以使用Java引用類型:
val a = Map[Int, java.lang.Boolean](1 -> true, 2 -> false)
val b: java.util.Map[Int, java.lang.Boolean] = a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.