我是斯卡拉的新手。我对这个编译错误感到困惑:
我创建这个HashMap并在许多函数中使用它:
val valuesMap:mutable.Map[String,Int]=mutable.HashMap()我有一个有这个签名的函数:
def saveToPjCsv(map:mutable.Map[Any,Any], fileName: String, outputDir: String): Unit =我将HashMap传递给函数:
DataFrameUtils.saveToPjCsv(valuesMap,"categoryMap",".\\DataManipulation\\")并获得以下编译错误:
错误:重载方法值saveToPjCsv和备选方案:INFO单元INFO单元信息无法应用到(scala.collection.mutable.MapString、Int、String、String)
为什么Map[Any,Any]不接受Map[String,Int]
发布于 2017-09-16 16:29:01
如果方法接受Map[String,Int]作为参数,然后插入"MyKey" -> "My value",会发生什么情况?在您的调用方法中将有一个MapString,Int,它实际上正在存储String -> String数据。这就是为什么这段代码不能编译。
从编译器的角度来看,它失败的原因是mutable.Map[Any, Any]与mutable.Map[String, Int]是不同的类型,它们之间没有层次关系。之所以没有关联,是因为您使用的是可变集合,在这些集合中不能使用方差。
如果您使用的是定义具有协方差的类型参数的不可变集合,则此操作将有效:
def saveToPjCsv(map:List[(Any, Any)], fileName: String, outputDir: String): Unit ={}
saveToPjCsv(List[(String, Int)](), "", "")要更好地理解什么是方差检验this
https://stackoverflow.com/questions/46255958
复制相似问题