Scala类型不匹配问题(预期Map,发现scala.collection.mutable.HashMap)

标签 scala types map mismatch

我仍然是 Scala 程序员新手,如果这个问题看起来很幼稚,很抱歉,但我搜索了一段时间并没有找到解决方案。我使用的是 Scala 2.8,我有一个类 PXGivenZ 定义为:

class PXGivenZ (val x:Int, val z:Seq[Int], val values: Map[Seq[Int], Map[Int, Double]] ){...}

当我尝试将该类的一个元素实例化到另一个程序块中时:
// x is an Int
// z is a LinkedList of Int
...
var zMap = new HashMap[Seq[Int], HashMap[Int, Double]]
...
val pxgivenz = new PXGivenZ(x, z, zMap)

我收到以下错误:
found   : scala.collection.mutable.HashMap[Seq[Int],scala.collection.mutable.HashMap[Int,Double]]
 required: Map[Seq[Int],Map[Int,Double]]
           val pxgivenz = new PXGivenZ(x, z, zMap) 
                                             ^

显然我没有得到一些东西:Map[Seq[Int],Map[Int,Double]] 与 HashMap[Seq[Int], HashMap[Int,Double]] 有何不同?还是“可变”类有问题?

在此先感谢任何愿意帮助我的人!

最佳答案

默认情况下,Map在 Scala 文件中导入的是 scala.collection.immutable.Map而不是 scala.collection.Map .当然,就您而言, HashMap 是可变映射,而不是不可变映射。

因此,如果你想要 Mapscala.collection.Map在您的文件中,您必须明确地导入它:

import scala.collection.Map

这种选择的原因是您不会以相同的方式操作不可变和可变结构。因此,scala 默认推断您将使用“最安全”的不可变结构。如果您不想这样做,则必须明确更改它。

关于Scala类型不匹配问题(预期Map,发现scala.collection.mutable.HashMap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122558/

相关文章:

scala - 在 Scala 中,有没有办法检查实例是否是单例对象?

xml - 如何使用 Play 服务 XML 和 JSON! 2.0

types - Prolog中有哪些数据类型?

java - 此 HashMap 场景的数据结构

map - MAP(移动应用程序部分)和 SMPP(短消息对等)协议(protocol)之间的区别

scala - 将一组函数应用于对象的语法

C++使一个类充当特定的数据类型

types - 参数化子集

C++:是否可以使用引用作为映射中的值?

scala - 通过电子邮件发送 Spark DataFrame