scala 中对象不是值错误

问题描述 投票:0回答:4

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

我使用的代码如下:

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

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

scala object dictionary
4个回答
26
投票

当您看到错误“对象不是值”时,这通常意味着范围内类型是 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 中,每个 class 都带有一个(可选)companion object,它是一个值。 Java 类并非如此。


6
投票

因为在 scala 中,每个本机 scala 类都带有一个(可选)伴生对象(允许从伴生对象进行赋值,如示例代码中所示),因此当将 java 类合并到 scala 代码中时,请始终记住通过调用构造函数来实例化该类,即。使用关键字“new”,从而创造一个价值。


3
投票

刚刚发现这个,所以也许分享我的解决方案会有用。 如果您已导入 java.util.Map 并需要使用 scala.collection.immutable.Map ,则将其与全名一起使用,而不是

 Map(1 -> "one")

scala.collection.immutable.Map(1 -> "one")

这样它就会知道你的意思


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 => JList}

import java.util.{List=>JList}
© www.soinside.com 2019 - 2024. All rights reserved.