对象在scala中不是值错误

时间:2012-01-31 11:56:35

标签: scala object map

尝试在Scala中制作地图时,收到以下错误消息:对象地图不是值

我正在使用的代码如下:

val myStringMap =  Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C")

我很困惑为什么我不能创建这个地图,因为在查看Scala文档之后,在我看来我的代码的语法是正确的。

4 个答案:

答案 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;,从而创建一个值。