首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala: mutable.Map[Any,Any]不能应用于mutable.Map[String,Int]

Scala: mutable.Map[Any,Any]不能应用于mutable.Map[String,Int]
EN

Stack Overflow用户
提问于 2017-09-16 16:18:45
回答 1查看 658关注 0票数 1

我是斯卡拉的新手。我对这个编译错误感到困惑:

我创建这个HashMap并在许多函数中使用它:

代码语言:javascript
复制
val valuesMap:mutable.Map[String,Int]=mutable.HashMap()

我有一个有这个签名的函数:

代码语言:javascript
复制
def saveToPjCsv(map:mutable.Map[Any,Any], fileName: String, outputDir: String): Unit =

我将HashMap传递给函数:

代码语言:javascript
复制
DataFrameUtils.saveToPjCsv(valuesMap,"categoryMap",".\\DataManipulation\\")

并获得以下编译错误:

错误:重载方法值saveToPjCsv和备选方案:INFO单元INFO单元信息无法应用到(scala.collection.mutable.MapString、Int、String、String)

为什么Map[Any,Any]不接受Map[String,Int]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-16 16:29:01

如果方法接受Map[String,Int]作为参数,然后插入"MyKey" -> "My value",会发生什么情况?在您的调用方法中将有一个MapString,Int,它实际上正在存储String -> String数据。这就是为什么这段代码不能编译。

从编译器的角度来看,它失败的原因是mutable.Map[Any, Any]mutable.Map[String, Int]是不同的类型,它们之间没有层次关系。之所以没有关联,是因为您使用的是可变集合,在这些集合中不能使用方差。

如果您使用的是定义具有协方差的类型参数的不可变集合,则此操作将有效:

代码语言:javascript
复制
def saveToPjCsv(map:List[(Any, Any)], fileName: String, outputDir: String): Unit ={}

saveToPjCsv(List[(String, Int)](), "", "")

要更好地理解什么是方差检验this

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46255958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档