尝试在 Scala 中制作映射时,收到以下错误消息:对象映射不是值
我使用的代码如下:
val myStringMap = Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C")
我很困惑为什么我无法创建这个映射,因为在查看 Scala 文档之后,在我看来我的代码的语法是正确的。
当您看到错误“对象不是值”时,这通常意味着范围内类型是 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 类并非如此。
因为在 scala 中,每个本机 scala 类都带有一个(可选)伴生对象(允许从伴生对象进行赋值,如示例代码中所示),因此当将 java 类合并到 scala 代码中时,请始终记住通过调用构造函数来实例化该类,即。使用关键字“new”,从而创造一个价值。
刚刚发现这个,所以也许分享我的解决方案会有用。 如果您已导入 java.util.Map 并需要使用 scala.collection.immutable.Map ,则将其与全名一起使用,而不是
Map(1 -> "one")
做
scala.collection.immutable.Map(1 -> "one")
这样它就会知道你的意思
我在列表上遇到类似的错误。在 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}