如何在Scala中实例化Unit?

pet*_*bel 6 java concurrency scala hashmap set

我想要的只是使用一些并发Set(看起来根本不存在).Java用于java.util.concurrent.ConcurrentHashMap<K, Void>实现该行为.我想在Scala中做类似的事情,所以我创建了Scala HashMap(或Java ConcurrentHashMap)的实例,并尝试添加一些元组:

val myMap = new HashMap[String, Unit]()
myMap + (("myStringKey", Unit))
Run Code Online (Sandbox Code Playgroud)

这当然会破坏编译过程,因为Unit是抽象的和最终的.

如何使这项工作?我应该使用Any/ AnyRef而不是吗?我必须确保没有人插入任何价值.

感谢帮助

End*_*Neu 11

您可以使用()其类型Unit:

scala> import scala.collection.mutable.HashMap
import scala.collection.mutable.HashMap

scala> val myMap = new HashMap[String, Unit]()
myMap: scala.collection.mutable.HashMap[String,Unit] = Map()

scala> myMap + ("myStringKey" -> ())
res1: scala.collection.mutable.Map[String,Unit] = Map(myStringKey -> ())
Run Code Online (Sandbox Code Playgroud)

这是一个评论来自Unit.scala:

只有一种类型的值Unit,()以及它不是由在底层运行时系统的任何对象表示.

  • 也许当你说'val x =()`时,你得到的是盒装值`scala.runtime.BoxedUnit.UNIT`.此外,`()`有类型单位:说"返回类型"可能会混淆人,因为功能应用程序中使用了paren.单位值看起来像一个空元组,而不是一个奇怪的应用程序. (3认同)