簡體   English   中英

將包含布爾的Scala映射轉換為包含java.lang.Boolean的Java映射

[英]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.Booleanjava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM