scala:带有HashMap参数的多态方法



正如下面的(非功能(代码所示,我想采用任何哈希图并转换为电子表格格式。

def printHashMapToCsv[T](m:Map[T,T],name:String, path:String): Unit =
{
Spreadsheet.initCsvSpreadsheet(name,path)
m.foreach
{
e=> Spreadsheet.addCell(IDGenerator.getInstance().nextID(),e._1.toString,e._2.toString)
}
Spreadsheet.printCsvFinal()
}

上面的代码可以编译,但是当我尝试使用以下代码调用该方法时,我得到了一个编译方法:

def mapOut(): Unit =
{
try{
val m:mutable.HashMap[Int,String]=new mutable.HashMap[Int,String]()
m.put(1,"sssss")
m.put(2,"ghfd")
m.put(3,"dfsa")
m.put(4,"fhjgsdf")
printHashMapToCsv(m,"mapout",s"${new File(".").getAbsolutePath}${File.separator}unitTestOutput")
}

编译错误:

错误:类型不匹配;[信息] 找到 : scala.collection.mutable.HashMap[Int,String] [INFO] 必需: 地图[?,?]

任何建议将不胜感激

似乎你只将一个类型参数 T 传递给 printHashMapToCsv 方法,并让它期望一个 Map[T, T]:

def printHashMapToCsv[T](m:Map[T,T], name:String, path:String)

但是,你给它一个 Map[Int, String],所以有两种不同的类型:

val m:mutable.HashMap[Int,String]=new mutable.HashMap[Int,String]()
printHashMapToCsv(m,"mapout",s"${new File(".").getAbsolutePath}${File.separator}unitTestOutput")

我想将 2 种类型传递给它,此方法定义应该可以解决问题:

def printHashMapToCsv[T, U](m:Map[T, U], name:String, path:String)

但是,如果您知道您传递的类型之一将始终相同(例如 Int(,则应只保留一个类型参数并显式要求它,如下所示:

def printHashMapToCsv[T](m:Map[Int, T], name:String, path:String)

希望这个帮助!

最新更新