尝试在Scala中制作地图时,收到以下错误消息:对象地图不是值
我正在使用的代码如下:
val myStringMap = Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C")
我很困惑为什么我不能创建这个地图,因为在查看Scala文档之后,在我看来我的代码的语法是正确的。
答案 0 :(得分:21)
当您看到错误“object is not value”时,这通常意味着范围内类型是Java类型 - 您可能正在范围内导入java.util.Map
scala> Map(1 -> "one")
res0: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> one)
但是
scala> import java.util.Map
import java.util.Map
scala> Map(1 -> "one")
<console>:9: error: object Map is not a value
Map(1 -> "one")
^
请记住,在scala中,每个类都附带一个(可选的)伴随对象,这是一个值。 Java类不是这样。
答案 1 :(得分:3)
刚刚发现这个,也许分享我的解决方案会很有用。 如果您已导入java.util.Map并需要使用scala.collection.immutable.Map,那么请使用全名,而不是
Map(1 -> "one")
DO
scala.collection.immutable.Map(1 -> "one")
通过这种方式,它会知道你的意思
答案 2 :(得分:1)
我在列表中遇到了类似的错误。在scala控制台中尝试这个:
import java.util.List object test { def a():List[String] = { val list = List[String](); null }}
你会得到错误的"Object List is not a value."
你得到它是因为你隐藏了内置的List类型,这是因为List与java.util.List不同
如果有人想使用util.List?
,该怎么办?您可以使用限定名称或重命名导入
! import java.util。{List =&gt; JList的}
import java.util。{List =&gt; JList}
答案 3 :(得分:1)
因为在scala中,每个本机scala类都附带一个(可选的)伴随对象(允许从示例代码中的伴随对象进行分配),当将java类合并到scala代码中时,请记住通过调用构造函数来实例化该类,即。使用关键字&#34; new&#34;,从而创建一个值。