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

时间:2018-09-22 04:38:00

标签: scala generics

如下面的(无效)代码所示,我想获取任何哈希图并转换为电子表格格式。

  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")

    }

编译错误:

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

任何建议将不胜感激

1 个答案:

答案 0 :(得分:1)

似乎您仅将一个类型参数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),则应该只保留一个type参数并明确要求它,例如:

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

希望获得帮助!