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

scala:具有HashMap参数的多态方法,scala,generics,Scala,Generics,正如下面的(不起作用的)代码所示,我想获取任何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()

正如下面的(不起作用的)代码所示,我想获取任何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方法,并使其需要一个映射[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)

希望这有帮助

您的
printHashMapToCsv[T]
方法需要一个
Map[T,T]
(即相同类型的键和值),而您给它一个
mutable.HashMap[Int,String]
。明白了,这就解释了错误