对象不是scala中的值错误

对象不是scala中的值错误,scala,object,map,Scala,Object,Map,尝试在Scala中创建映射时,我收到以下错误消息:对象映射不是值 我使用的代码如下所示: val myStringMap = Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C") 我很困惑为什么我不能创建这个映射,因为在查看Scala文档之后,我觉得我的代码的语法是正确的 当您看到错误“对象不是值”时,这通常意味着范围内类型是Java类型-您可能正在范围内导入Java.util.Map sc

尝试在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
导入java.util.Map
scala>地图(1->“一”)
:9:错误:对象映射不是值
地图(1->“一”)
^

记住,在scala中,每个类都有一个(可选)伴生对象,它是一个值。Java类的情况并非如此。

我在列表中遇到了类似的错误。在scala控制台中尝试以下操作:

import java.util.List对象测试{def a():List[String]={val List=List[String]();null}

您将得到错误“对象列表不是值。”

得到它是因为隐藏了内置的列表类型,这是因为List不同于java.util.List

如果有人想使用util.List怎么办

您可以使用限定名称或重命名导入

!!导入java.util.{List=>JList}


import java.util.{List=>JList}

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

 Map(1 -> "one")


通过这种方式,它将了解您的意思

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

如果我启动一个REPL并粘贴到这段代码中,它就可以正常工作;它不适合你,这意味着你的其他设置。您运行的是哪个版本的Scala,您有哪些导入等。上下文中的某些内容可能隐藏了
Map
的标准导入,并导致此问题。哪个Scala版本?在2.9.0.1中的REPL:
myStringMap:scala.collection.immutable.Map[String,String]=Map(first->A,second->B,third->C)
中对我有效。非常感谢您的快速响应。我发现我在导入java.utils.map时没有实际使用它。删除导入也删除了我的错误。假设我没有跟踪内置类,而是尝试使用Java类。我该怎么做才能得到那个伴生物体?我不明白答案。那么,如何修复它呢?:)这不适合我
 Map(1 -> "one")
scala.collection.immutable.Map(1 -> "one")